我在端口号3000
运行的docker容器中有一个app,暴露给主机(端口3050映射到容器的端口3000),我想使用这个{{ 3}}将http://localhost/users
等网址指向/代理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
,这会在服务暂时不可用时出现503错误。
也许我认为整个想法都错了,有人可以用nginx反向代理来帮助或纠正我吗?
答案 0 :(得分:8)
在做了一些搜索后,我能够将一个有效的VIRTUAL_HOST=port
组合到节点上,该代理有一个工作的nginx反向代理(docker hub中的 image:jwilder / nginx-proxy )基于.js的网络应用程序我在一个单独的容器中。
使其发挥作用的关键是:
port
,此https
应该是我的node.js应用程序在其容器中运行的端口(而不是在主机上映射的端口!)http
,则应设置SSL证书,但应将VIRTUAL_PROTO=http
(而不是https)设置为环境变量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"
网络应用容器。 以下是工作的docker-compose.yml :
'OPTIONS': {
'MAX_ENTRIES': 100
}
希望这有助于某些人有一天从搜索引擎登陆此页面!