主机中无法访问Docker容器

我的一些容器正在生产中运行一个Web服务器(PHP,NodeJS)。

如果我们以NodeJS容器为例,这是它的configuration

泊坞窗,compose.yml

version: '2' services: webapp: build: . volumes_from: - data links: - db:db - redis:redis ports: - '8080:3000' restart: always ... 

有了这个configuration,我可以通过http://example.com:8080/访问我的webapp,但是我无法访问我的主机

 $ curl localhost:8080 (Time-out) 

我的主机上有这个configuration的Nginx服务器:

example.com.conf

 upstream webapp { server 127.0.0.1:8080; } server { listen 80; listen [::]:80; server_name example.com; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_redirect off; proxy_pass http://webapp; } } 

但是joinhttp://example.com/导致504网关超时。

如果我尝试通过'127.0.0.1:8080:3000'更改docker-compose.yml的端口configuration,问题仍然存在,但无法访问http://example.com (和http://example.com:8080但这是我想要的结果)。

这是非常奇怪的,我没有在新的服务器上运行我的应用程序的问题。 我正在寻找这个问题的根源。

感谢您的支持。

编辑:

 $ netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.11:59712 0.0.0.0:* LISTEN - udp 0 0 127.0.0.11:33293 0.0.0.0:* - 

Web服务器必须在端口3000上监听,但我有

 $ docker-compose logs webapp_1 | Express server listening on port 3000 in production mode 

服务器也在运行…

 $ docker port webapp_1 3000/tcp -> 127.0.0.1:8080 

编辑:这应该工作类似于你如何,你尝试改变: proxy_set_header HOST $http_host;proxy_set_header HOST $host; 在你的nginxconfiguration?

你可以把nginx放到你的Docker Compose文件中,让Compose使用自己的networking。 如果要在其他networking中添加项目,则可以指定自定义networking,请参阅: https : //docs.docker.com/compose/networking/

否则,您可以查看主机上ifconfig等的输出,查看哪些IP和networking撰写正在使用以及主机正在监听什么。