假设已有服务器已经配置了iptables,这个时候安装并运行docker容器后,docker会自动向iptables添加 FORWARD规则来实现与宿主机的网络通信。
一旦不小心,直接在iptables中新开放了端口操作,重载iptables规则后,docker添加的规则会被覆盖,这就导致了docker服务的网络异常。怎么解决?
开启内核转发
1 | sysctl net.ipv4.ip_forward |
1. 首先要在防火墙配置文件里面添加docker FORWARD规则
iptables需要允许docker转发及容器间通信
1 | Docker |
注:如果有多个自定义网络,容器访问外网同样需要配置masquerade
2. 修改docker服务启动配置
其次, ,在docker启动配置中,把docker自定义iptables规则移除
1 | 通过此命令获取docker systemd的启动配置文件,接下来要修改 |
vim /usr/lib/systemd/system/docker.service
1 | 找到如下行并添加参数:--iptables=false,意思是启动docker的时候不自动向iptables添加规则 |
3. 重启服务
重载iptables规则
首先stop掉已有容器
重启docker
systemctl daemon-reload && systemctl restart docker
启动docker容器
这个时候,在iptables中再开启端口的时候,就不怕docker容器服务的网络会出现问题了。
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2019/12/03/Docker与iptables防火墙/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!