有问题使用nginx代理+ dockergen在主机端口80上运行节点服务器?

基本上我试图设置我的节点应用程序由nginx在我的docker机器的http://192.168.99.100/ ,而不是绕过nginx和做像http://192.168.99.100:7777/通过发布端口7777到主机。

我目前正试图服务我的docker机器的根,我的frontend节点应用程序容器,即http://192.168.99.100/ 。 我使用dockergen和nginx(单独的容器)一起来自动生成这个。 从Dockerfile构build的我的节点应用程序在以下地址和端口localhost:7777运行npm run dev:no-debug

我有以下的撰写文件。

 version: '2' services: frontend: build: context: ./frontend volumes: - ./frontend:/usr/src/app - /usr/src/app/node_modules expose: - "7777" environment: - "PORT=7777" - "VIRTUAL_HOST=192.169.99.100" nginx_proxy: image: nginx container_name: nginx_proxy ports: - "80:80" - "443:443" links: - frontend volumes: - /tmp/nginx:/etc/nginx/conf.d - ./nginx/certs:/etc/nginx/certs dockergen: image: jwilder/docker-gen container_name: dockergen volumes_from: - nginx_proxy volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./dockergen/templates:/etc/docker-gen/templates entrypoint: /usr/local/bin/docker-gen -notify-sighup nginx_proxy -watch -only-exposed /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf 

容器启动良好,正常工作没有错误。

  Name Command State Ports -------------------------------------------------------------------------------------------------- cms_frontend_1 npm run dev:no-debug Up 7777/tcp dockergen /usr/local/bin/docker-gen ... Up nginx_proxy nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp 

使用当前设置生成的default.conf nginx文件具有:

 upstream 192.169.99.100 { # cms_frontend_1 server cms_frontend_1:7777; } server { server_name 192.169.99.100; listen 80 ; access_log /var/log/nginx/access.log vhost; location / { proxy_pass http://192.169.99.100; } } 

当去http://192.168.99.100/我得到一个503。

对于networking世界来说,我还是一个相当新的东西,但是从192.169.99.100的请求中获取上述代码片段后,nginx会使用与proxy_pass地址对应的上行数据块,然后将该请求传递给该服务器,即cms_frontend_1:7777

从这我猜问题是, cms_frontend_1:7777不对应于服务器正在运行的localhost:7777 。 如果我将以下内容添加到frontend服务容器,我可以访问我的应用程序在http://192.168.99.100:7777 。 然而,这个失败了让nginx代理请求的目的。

 ports: - "7777:7777" 

所以我的问题是这是一个错误的configuration,或者我误解了一些概念是如何工作的? 另外,我希望这样做尽可能dynamic,所以说如果我想要部署的东西不需要在整个地方重新configuration(因此我尝试使用dockergen)。

谢谢