簡體   English   中英

Docker容器在主機中無法訪問

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM