[英]Unable to communicate from one Docker container to an exposed container on the same machine
目前,我正在尝试使一个容器与另一个暴露并在同一台机器上运行的容器进行通信。
假设外部 IP 地址是123.123.123.123
,我通过docker-compose.yaml
中的ports
属性在端口8080
上公开了一个基本的 NGINX Docker 容器,然后我执行curl http://123.123.123.123:8080
。 它从外部机器成功获得响应,从主机执行命令也是如此。 但是,当我从同一台机器上的另一个容器执行此 curl 时,它会超时退出。
我不确定原因,我尝试通过https://serverfault.com/a/129087暂时暴露所有端口,这实际上允许从一个容器到暴露容器的通信(当然我之后恢复了以前的配置) .
能够使用外部路由对我来说很重要,特别是因为在生产中jwilder/nginx-proxy
与 HTTPS 证书一起使用。
这台机器运行的是 Ubuntu 20.04,我没有更改 iptables 提供的任何防火墙设置。
ufw status
输出:
Status: active
To Action From
-- ------ ----
22/tcp LIMIT Anywhere
2375/tcp ALLOW Anywhere
2376/tcp ALLOW Anywhere
22/tcp (v6) LIMIT Anywhere (v6)
2375/tcp (v6) ALLOW Anywhere (v6)
2376/tcp (v6) ALLOW Anywhere (v6)
可能是iptables -L
最相关的部分:
Chain DOCKER (6 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.18.0.2 tcp dpt:9000
ACCEPT tcp -- anywhere 172.20.0.2 tcp dpt:http
ACCEPT tcp -- anywhere 172.18.0.5 tcp dpt:https
ACCEPT tcp -- anywhere 172.18.0.5 tcp dpt:http
ACCEPT tcp -- anywhere 172.19.0.6 tcp dpt:mysql
好奇如何解决这个问题。 当然,将两个容器添加到同一个内部网络可以解决这个问题,但是由于端口8080
已经暴露给世界,我希望这也包括内部流量。 我正在使用 Docker Compose,这两个容器都不属于同一个docker-compose.yaml
解决方案一直盯着我的脸。 基本上,使用DigitalOcean 提供的此图像, iptables 和 UFW 都同时启用。 但是,当您向 Docker 配置添加端口时,Docker 无法公开端口。
显然,这对于外部流量来说基本上不是问题,因为在这种情况下,UFW 显然不处理外部流量,这完全取决于 iptables。 添加ufw allow http
和ufw allow https
修复它!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.