繁体   English   中英

无法从一个 Docker 容器与同一台机器上的暴露容器进行通信

[英]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 httpufw allow https修复它!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM