docker与iptables的互联网连接=错误
我放弃了。我正在使用Ubuntu16.04下的Docker1.12.0,并使用UFW进行了加固 该机器有2个接口-一个公用(eth0)接口和一个到专用网络(eth1)接口 就像我对以前版本所做的那样,我将“iptables”配置为false,这样docker就不会更改我的防火墙 但是在docker(11+)的最新版本中,这个命令有一个副作用——重新启动后,docker容器停止访问网络(ping www.google.com) 我一再证实。 如何复制: -停止docker守护进程docker与iptables的互联网连接=错误,docker,iptables,Docker,Iptables,我放弃了。我正在使用Ubuntu16.04下的Docker1.12.0,并使用UFW进行了加固 该机器有2个接口-一个公用(eth0)接口和一个到专用网络(eth1)接口 就像我对以前版本所做的那样,我将“iptables”配置为false,这样docker就不会更改我的防火墙 但是在docker(11+)的最新版本中,这个命令有一个副作用——重新启动后,docker容器停止访问网络(ping www.google.com) 我一再证实。 如何复制: -停止docker守护进程 sudo sys
sudo systemctl stop docker
我通过添加文件/etc/docker/daemon.json来配置iptables=false:
{
"iptables" : false
}
(这是唯一的配置)
启动守护程序:
sudo systemctl start docker
docker run --rm python ping www.google.com
即使它能为你工作-如果你重新启动系统-它也会停止工作。。。你有什么解决办法吗
我检查了我的iptables规则,重新启动系统后,我缺少这些规则:
:PREROUTING ACCEPT [8:496]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.18.0.0/16 ! -o br-a0b355ce53ac -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i br-a0b355ce53ac -j RETURN
# same
:DOCKER - [0:0]
:DOCKER-ISOLATION - [0:0]
# same
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-a0b355ce53ac -j DOCKER
-A FORWARD -o br-a0b355ce53ac -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br-a0b355ce53ac ! -o br-a0b355ce53ac -j ACCEPT
-A FORWARD -i br-a0b355ce53ac -o br-a0b355ce53ac -j ACCEPT
# same
-A DOCKER-ISOLATION -i br-a0b355ce53ac -o docker0 -j DROP
-A DOCKER-ISOLATION -i docker0 -o br-a0b355ce53ac -j DROP
-A DOCKER-ISOLATION -j RETURN
谢谢 docker网络模型使用iptables为您的容器设置internet连接。如果您明确不希望使用网桥或覆盖网络驱动程序的容器具有任何网络连接,我只会将iptables设置为false
当您使用iptables=true启动守护程序时,它将在防火墙中设置所需的规则。当docker关闭时,我不相信它会破坏这些规则,所以它们会继续存在。这就是为什么在使用iptables=false启动docker备份后,您可以获得internet连接。如果您希望在重新启动后的下一次docker启动时保留这些规则,最好的方法是保持iptables=true。docker通常在系统上与ufw一起运行。你的系统中docker+ufw遇到了什么样的问题?我理解。我希望他们能将“iptables”配置分为“传出”和“传入”。因为我确实希望docker允许我的容器具有传出通信,所以只有在发布端口时才有“传入”规则。如果您不这样做,那么实际上只有iptables规则可以为该容器启用outgong连接。我认为我的问题是我的云提供商不提供网络安全配置,因此我必须使用UFW/iptables来定义我向外部世界公开的端口。我想用一种简单的方法告诉我的机器将端口8080暴露给内部网络,但不要暴露给外部世界,我不想硬编码机器私有IP到docker绑定规则…很好的解释!但是,设置防火墙需要iptables=false。Docker不应覆盖防火墙配置。
:PREROUTING ACCEPT [8:496]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.18.0.0/16 ! -o br-a0b355ce53ac -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i br-a0b355ce53ac -j RETURN
# same
:DOCKER - [0:0]
:DOCKER-ISOLATION - [0:0]
# same
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-a0b355ce53ac -j DOCKER
-A FORWARD -o br-a0b355ce53ac -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br-a0b355ce53ac ! -o br-a0b355ce53ac -j ACCEPT
-A FORWARD -i br-a0b355ce53ac -o br-a0b355ce53ac -j ACCEPT
# same
-A DOCKER-ISOLATION -i br-a0b355ce53ac -o docker0 -j DROP
-A DOCKER-ISOLATION -i docker0 -o br-a0b355ce53ac -j DROP
-A DOCKER-ISOLATION -j RETURN