现有机器 A,单网卡地址为 addA
。
机器上有两组容器,一组使用 docker-compose 编排,网段为dockernet1
,另一组使用 docker run 运行,为 mongodb,mysql 之类的,网段为dockernet2
,暴露出的端口有 3306,27017 等。
现在发现,在不设值任何 iptables 规则的默认情况下,dockernet1
中容器的应用无法通过机器的 IP+暴露出的端口(addA:27017
)访问dockernet2
中的容器的数据库。但是如果我设值了iptables -I INPUT -p tcp -s dockernet1/16 --dport 27017 -j ACCEPT
之后,虽然可以从 dockernet1 中访问,但也会导致全网都可以访问这个端口了。
经过测试尝试,我发现了如下现象:
addA:27017
的方式访问容器中启动的数据库;addA:27017
)可以访问数据库,在其他主机也可以;iptables -I INPUT -s dockernet1/16 --dport 27017 -j ACCEPT
后,会导致全网都可以访问这个端口,即使设值了默认 DROP 掉白名单之外的链接;addA:27017
形式建立的链接,但是没有抓到任何包;请教一下大家:
1
xpke04 OP 补充,docker 网络使用的是默认的 bridge 模式,另外,在容器中是能够访问主机上绑定的其他端口的服务的,但是不能访问容器 expose 出来的端口上的服务。
|