docker设置iptables=false后无法解析DNS的解决方法
docker设置iptables=false后无法解析DNS的解决方法
本文参考:docker设置iptables=false后无法解析DNS的解决方法_docker iptables false
docker默认使用iptables进行网络配置,与ufw有点不兼容,ufw无法管控docker暴露出来的端口,可能会造成一定的安全问题,所以某些情况下需要将docker的iptables设置为false。
设置之后进入docker容器内部发现无法访问网络,只能与172.17.0.1网段通信。
解决方案如下:
sudo systemctl edit docker.service
1 | [Service] |
配置解释:
这段配置的作用是为Docker容器设置网络地址转换(NAT),使得从172.17.0.0/16子网发出的流量经过docker0接口时进行MASQUERADE(伪装)处理,以实现网络地址的转换和隐藏。
在这段配置中:
ExecStartPre
行指定了在启动服务之前执行的操作,即向iptables中添加一个POSTROUTING规则,对从172.17.0.0/16子网发出的流量进行MASQUERADE处理,但排除了流量经过docker0接口的情况。ExecStopPost
行指定了在停止服务之后执行的操作,即从iptables中删除之前添加的相同规则。
这种配置通常用于在Docker环境中管理网络流量,确保容器内部的流量能够正常地与外部通信,并且对外部网络隐藏了容器内部的真实IP地址。
生效配置
sudo systemctl daemon-reload 即可
systemctl restart docker 测试docker能否正常启动
参考资料:
https://gist.github.com/circa10a/e6cfc673af9282d17dfb958ef6adabeb
https://github.com/moby/moby/issues/26776
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment