[英]Docker container not accessible in host machine
我的一些容器正在生產中運行Web服務器(PHP,NodeJS)。
如果我們以NodeJS容器為例,這就是它的配置
泊塢窗,compose.yml
version: '2'
services:
webapp:
build: .
volumes_from:
- data
links:
- db:db
- redis:redis
ports:
- '8080:3000'
restart: always
...
使用此配置,我可以通過http://example.com:8080/
訪問我的webapp,但我無法在我的主機上訪問
$ curl localhost:8080
(Time-out)
我的主機上有一個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;
}
}
但是加入http://example.com/
拋出504網關超時。
如果我嘗試通過'127.0.0.1:8080:3000'
更改docker-compose.yml
的端口配置,問題仍然存在,但無法訪問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;
在你的nginx配置?
您可以將nginx放入Docker Compose文件中,讓Compose使用自己的網絡。 如果要在其他網絡中添加項目,可以指定自定義網絡,請參閱: https : //docs.docker.com/compose/networking/
否則,您可以查看主機上ifconfig
等的輸出,並查看正在使用的IP和網絡Compose以及主機正在偵聽的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.