gpt4 book ai didi

http - Docker 路由/反向代理问题,无法 curl 其他容器

转载 作者:可可西里 更新时间:2023-11-01 15:30:08 30 4
gpt4 key购买 nike

我有一个 docker 主机在各个容器内运行 2 个 Web 应用程序。我在它们前面设置了一个 nginx 容器作为反向代理。不同子域有两个 dns 条目指向这个单一主机,因此我可以通过 app1.domain.com 访问应用程序 1,通过 app2.domain.com 访问应用程序 2。此设置运行良好,每个应用程序都可供更广阔的世界访问。

但是,app2 还需要能够对 app1 提供的网络服务进行 http 调用。出于某种原因,http 调用 http://app1.domain.com无法从 app2 容器中解析。 curl http://app1.domain.com 返回 Failed to connect to app1.domain.com port 80: No route to host. 奇怪的是,我可以 ping app1.domain .com 来自 app2 的容器,它成功解析为主机 url。我已经尝试在 docker 主机上使用 service iptables stop 禁用 iptables,这会导致 curl 和 ping 命令简单地挂起一段时间,然后最终返回有关 ping 的未知主机的错误并且无法解决curl 的主机。

最后,我可以使用 docker ip 地址和端口从 app2 的容器 curl 到 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.7app2 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

关于http - Docker 路由/反向代理问题,无法 curl 其他容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31105239/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com