自定义IP之后,同一主机上面的容器A不能通过IP+PORT的方式访问另外一个容器


现象:
宿主主机 192.168.3.141
容器A 开放80 -p 80:80
容器B 开放6379 -p 6379:6379

如果A和B都按默认的方式启动,进入A中,
通过 redis-cli -h 172.17.0.22 可以访问 B,
也可以通过 redis-cli -h 192.168.3.141 访问B,

但是 A和B都采用 --net=none然后自定义IP,并且是正确的配置了防火墙,
只能通过 redis-cli -h 172.17.0.22 访问 B,
不能通过 redis-cli -h 192.168.3.141 访问B,

想知道是配置防火墙有误还是什么原因造成的,怎么样设置才能像默认启动方式那样访问。
已邀请:

冯明振

赞同来自: shlallen


看看是否是Iptables规则的问题,可能B没有在主机上做好映射。

可以贴出你A、B的IP地址信息,A、B使用的网桥,和你主机上iptables规则的详细信息。

darkheaven - Divergent; BUPT inside

赞同来自:


iptables规则在做DNAT转发时有一个条件就是端口不能是Docker0,这条规则阻挡了容器A通过host ip访问容器B
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.10:80

MapleWang

赞同来自:


你使用了--net=none, 这个意味着“no networking for container”,我是不知道你在这种情况下是怎么自定义IP的,但是使用网桥模式就不能自定义IP了吗?一般none这种模式适合做独立container的沙盒测试,你为什么要用这种模式呢?如果想要获得定义网络更大的自由度,可以使用额外的工具嘛,鉴于你是同一个node,可以使用pipework,如果是跨node,可以用weave,至不济,也可以在docker daemon里面通过--bridge或者--bip,还有--fixed-cidr来改变默认网络参数。

要回复问题请先登录注册