将 nginx 反向代理设置为从另一个 docker 容器提供服务
Setting nginx reverse proxy to serve from another docker container
我在端口号 3000
的 docker 容器 运行 中有一个应用程序,暴露给主机(端口 3050 映射到容器的端口 3000),我会喜欢用这个 nginx-proxy 来指向像 http://localhost/users
到 point/proxy 到 http://localhost:3050/users
.
这样的 url
我的 docker-compose.yml
文件中有这个块:
nginx_service:
image: jwilder/nginx-proxy
container_name: nginx_server
ports:
- "80:80"
- "443:443"
volumes:
- ./ssl_certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro
下面是 docker-compose.yml
中定义的容器,它在 docker 容器中的端口 3000 上运行我的应用程序:
api:
build: .
container_name: api
environment:
- VIRTUAL_HOST= service.myserver.com
- VIRTUAL_PROTO=https
volumes:
- "./API:/host"
links:
- Mongo:Mongo
ports:
- "3050:3000"
启动 docker 容器后,我可以在浏览器中打开 http://localhost:3050/users
,但不能打开 http://localhost/users
,这让我暂时出现 Service 的 503 错误不可用。
也许我理解错了,有人可以用 nginx 反向代理帮助或纠正我吗?
经过一番搜索后,我找到了一个可以正常工作的 docker-compose.yml
,它有一个可以正常工作的 nginx 反向代理(图片:jwilder/nginx-proxy 在 docker hub) 到我在单独容器中的基于 node.js 的网络应用程序。
使其工作的关键如下:
- 在nginx反向代理容器中设置
VIRTUAL_HOST=port
,这个port
应该是我的node.js应用程序在其容器中运行的端口(不是主机上映射的端口! )
- 如果你想让nginx反向代理在
https
上,你应该设置一个SSL证书,但是应该设置http
(不是https)到环境变量VIRTUAL_PROTO=http
在网络应用程序容器中。
下面是工作docker-compose.yml:
nginx_service:
image: jwilder/nginx-proxy
container_name: nginx_server
ports:
- "80:80"
- "443:443"
volumes:
- ./ssl_certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
- VIRTUAL_PORT=3000 # 3050 port on host does not work!
api:
build: .
container_name: api
environment:
- VIRTUAL_HOST=service.myserver.com
- VIRTUAL_PROTO=http # should be http even if you use https to the proxy, because node.js uses http!
volumes:
- "./API:/host"
links:
- Mongo:Mongo
ports:
- "3050:3000"
希望有一天这会帮助某人从搜索引擎登陆此页面!
我在端口号 3000
的 docker 容器 运行 中有一个应用程序,暴露给主机(端口 3050 映射到容器的端口 3000),我会喜欢用这个 nginx-proxy 来指向像 http://localhost/users
到 point/proxy 到 http://localhost:3050/users
.
我的 docker-compose.yml
文件中有这个块:
nginx_service:
image: jwilder/nginx-proxy
container_name: nginx_server
ports:
- "80:80"
- "443:443"
volumes:
- ./ssl_certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro
下面是 docker-compose.yml
中定义的容器,它在 docker 容器中的端口 3000 上运行我的应用程序:
api:
build: .
container_name: api
environment:
- VIRTUAL_HOST= service.myserver.com
- VIRTUAL_PROTO=https
volumes:
- "./API:/host"
links:
- Mongo:Mongo
ports:
- "3050:3000"
启动 docker 容器后,我可以在浏览器中打开 http://localhost:3050/users
,但不能打开 http://localhost/users
,这让我暂时出现 Service 的 503 错误不可用。
也许我理解错了,有人可以用 nginx 反向代理帮助或纠正我吗?
经过一番搜索后,我找到了一个可以正常工作的 docker-compose.yml
,它有一个可以正常工作的 nginx 反向代理(图片:jwilder/nginx-proxy 在 docker hub) 到我在单独容器中的基于 node.js 的网络应用程序。
使其工作的关键如下:
- 在nginx反向代理容器中设置
VIRTUAL_HOST=port
,这个port
应该是我的node.js应用程序在其容器中运行的端口(不是主机上映射的端口! ) - 如果你想让nginx反向代理在
https
上,你应该设置一个SSL证书,但是应该设置http
(不是https)到环境变量VIRTUAL_PROTO=http
在网络应用程序容器中。
下面是工作docker-compose.yml:
nginx_service:
image: jwilder/nginx-proxy
container_name: nginx_server
ports:
- "80:80"
- "443:443"
volumes:
- ./ssl_certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
- VIRTUAL_PORT=3000 # 3050 port on host does not work!
api:
build: .
container_name: api
environment:
- VIRTUAL_HOST=service.myserver.com
- VIRTUAL_PROTO=http # should be http even if you use https to the proxy, because node.js uses http!
volumes:
- "./API:/host"
links:
- Mongo:Mongo
ports:
- "3050:3000"
希望有一天这会帮助某人从搜索引擎登陆此页面!