繁体   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