Nginx的docker容器将不会代理Web应用程序容器

我有一个Docker容器,运行一个Web应用程序和一个运行Nginx的docker容器:ubuntu。

Web应用程序容器运行在端口:3000上,暴露于外部(浏览器连接到主机的端口:3000端口访问应用程序)

Nginx容器运行在80端口,可以通过浏览器连接到主机的ip访问

Nginx容器和Web应用都连接到相同的Docker网桥。 我可以在它的内部IP(172.21.0.2)上docker exec -it(nginx)bash和ping(web-app),反之亦然。 我也可以从两个容器外使用nmap,看到(nginx)的内部IP为80开放端口,应用程序的开放端口为3000。

什么不坏:

Nginx安装正确,但可能configuration不正确。 networking应用程序很实用,不幸的是无法重新configuration以适应Nginx。

我曾经尝试过:

通过docker-compose.yml,dockerfile,一个空容器> bash和手动apt-get安装nginx来安装nginx。

由于应用程序图像的细节(图像实际上是一个node.js容器并具有应用程序的子服务),因此我不能在一个docker-compose文件中包含Web应用程序和nginx(并修复networking问题)试图在一个docker-compose.yml中包含这两个服务只是导致撰写创buildnginx和一个无应用程序的node.js容器。

我想做什么:

仅通过dockerfile和docker run命令创build一个nginx容器(以支持可伸缩性),通过它们都连接的dockernetworking来代理已经运行的应用容器。 我希望nginx能够在80端口上收听,并把它发送到3000端口的容器。我感到困惑的是: 在nginx.conf文件中,是否将其路由到容器的内部IP为172.21.0.2:3000,(hostIP):3000,Localhost:3000或0.0.0.0:3000? 我的文件如下:

Dockerfile:

FROM xqdocker/ubuntu-nginx COPY nginx.conf /etc/nginx/nginx.conf ##.confd IS LOCAL TO DOCKERFILE 

nginx.conf:

 worker_processes 1; events { worker_connections 1024; } http { sendfile on; upstream docker-nginx { server 172.21.0.2:3000; #WHAT DO I PUT HERE?? } server { listen 80; location / { proxy_pass http://docker-nginx; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; } } } 

docker运行命令:

 $ docker build -t reverseproxy $ docker run --name nginx_proxy -p 80:80 -d reverseproxy $ docker network connect nginx_app_bridge <nginx_proxy container ID> 

请注意,该应用的docker-compose文件具有指定的nginx_app_bridgenetworking。 dockernetworking检查nginx_app_bridge列出了172.21.0.2(app)和172.21.0.3(nginx)上连接的2个容器,

所以我想知道的是,如果两个容器运行正常,可以从外面看到,可以看到对方,并在同一个networking桥,为什么/如何Nginx不路由请求到端口上的容器:3000 ?

我已经经历了约40个不同的教程和堆栈溢出build议如何解决这个问题。 我尝试了很多方法来使这个工作。 我正在寻找的是一种强制nginx拦截所有端口80请求到主机IP和路由到Web应用程序的方式。