簡體   English   中英

Docker路由/反向代理問題,不能卷曲其他容器

[英]Docker routing/reverse proxy issue, can't curl other container

我有一個docker主機在各個容器中運行2個web應用程序。 我在它們前面都有一個nginx容器設置作為反向代理。 對於指向此單個主機的不同子域,有兩個dns條目,因此我可以通過app1.domain.com訪問app 1,使用app2.domain.com訪問app2。 此設置工作正常,每個應用程序都可以訪問更廣泛的世界。

但是,app2還需要能夠對app1提供的webservices進行http調用。 出於某種原因,無法從app2容器中解析對http://app1.domain.com的http調用。 curl http://app1.domain.com返回Failed to connect to app1.domain.com port 80: No route to host. 奇怪的是,我可以從app2的容器中ping app1.domain.com並成功解析為主機url。 我已經嘗試在docker主機上使用service iptables stop禁用iptables,這導致curl和ping命令簡單地掛起一段時間,然后最終返回有關ping的未知主機的錯誤,並且無法解析curl的主機。

最后,我可以使用docker ip地址和端口從app2的容器卷曲到app1,雖然這不是一個理想的解決方案,因為它需要更改此應用程序的部署和配置方式,以便可以發現此IP地址和端口。

更新: iptables -n -L -v -x輸出

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 ACCEPT     tcp  --  eth1   *       10.191.192.0/18      0.0.0.0/0
     124     6662 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
       3      120 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3306
  141668 14710477 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5432
  252325 512668022 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
      31     2635 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
       0        0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    5496   331240 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
     623    37143 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
  437791 334335762 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
  438060 347940196 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           ctstate RELATED,ESTABLISHED
  680992 61107377 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
     356    24168 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0
       0        0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 604 packets, 125207 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 ACCEPT     tcp  --  *      eth1    0.0.0.0/0            10.191.192.0/18
     124     6662 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

Chain DOCKER (1 references)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.2          tcp dpt:81
       0        0 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.2          tcp dpt:443
    2191   156283 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.2          tcp dpt:80
       0        0 ACCEPT     tcp  --  docker0 docker0  172.17.0.60          172.17.0.7          tcp dpt:3000
       0        0 ACCEPT     tcp  --  docker0 docker0  172.17.0.7           172.17.0.60         tcp spt:3000

app1 docker ip:172.17.0.7 app2 docker ip:172.17.0.60

您可以鏈接您的docker容器,然后使用該鏈接直接與app2中的app1對話。 通過這種方式,您可以避免dns解析,因此會更快。

假設您以下列方式運行容器:

docker run --name app1 app1-image

docker run --name app2 --link app1 app2-image

現在,從app2容器中,您可以使用主機名'app1'訪問app1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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