Docker 容器内不能通过内网 IP 地址访问宿主机 Redis 的诡异问题

2018-11-01 12:22:10 +08:00
 itskingname

我有两台云服务器 A 和 B,假设他们的内网 IP 分别为 10.11.0.3 和 10.11.0.4

我在两台服务器上面都安装了 Redis。并开通了全网访问。

现在在两台服务器上分别各启动一个 docker 容器。

使用外网 IP 的时候,一切正常。

但是一旦使用内网 IP:10.11.0.3 和 10.11.0.4 就会出现:

不仅是 Redis,甚至使用 Python 的 http.server 搭建一个服务器也是这样的效果。docker 不能通过内网地址访问宿主机上面的任何端口。但是能通过内网地址与其他服务器上面的网络服务正常通信。

8251 次点击
所在节点    问与答
6 条回复
xiaoxinshiwo
2018-11-01 13:46:45 +08:00
网络模式没设置吧?默认是 bridge 这种模式容器和宿主数隔离的
楼主可以设置 host 模式;通过命令--network=host 指定,使用 host 模式的容器可以直接使用 docker host 的 IP 地址与外界通信,容器内部的服务端口也可以使用宿主机的端口
itskingname
2018-11-01 16:07:06 +08:00
@xiaoxinshiwo 对的,解决方式没问题,确实设置--network=host 可以解决问题。我的疑惑是,为什么它能够通过内网 IP,访问宿主机所在的局域网里面的其他服务器?既然隔离了,它是如何识别宿主机的局域网的?
xiaoxinshiwo
2018-11-01 17:18:37 +08:00
@itskingname #2 建议你看看 docker 的网络模式
kkxxxxxxx
2018-11-01 17:26:38 +08:00
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload
itskingname
2018-11-01 23:20:53 +08:00
@kkxxxxxxx 不是防火墙的问题。
cy97cool
2018-11-01 23:37:14 +08:00
iptables -t nat -L

看看是不是有一条 drop 的规则

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/503358

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX