2014-09-18 20 views

回答

9

最好的办法是重新启动你的d​​ocker服务,然后它会重新添加你的docker规则到iptables。 (上DEB-基于:sudo service docker restart

但是,如果你只是想恢复这些规则,无需重新启动您的服务,我也救了我,所以你可以检查,并调整它为你工作,然后加载使用sudo iptables-restore ./iptables-docker-ports.backup

编辑并保存到./iptables-docker-ports.backup

# Generated by iptables-save v1.4.21 on Thu Apr 30 20:48:42 2015 
*nat 
:PREROUTING ACCEPT [18:1080] 
:INPUT ACCEPT [18:1080] 
:OUTPUT ACCEPT [22:1550] 
:POSTROUTING ACCEPT [22:1550] 
: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.17.0.1/32 -d 172.17.0.1/32 -p tcp -m tcp --dport 80 -j MASQUERADE 
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 3001 -j DNAT --to-destination 172.17.0.1:80 
COMMIT 
# Completed on Thu Apr 30 20:48:42 2015 
# Generated by iptables-save v1.4.21 on Thu Apr 30 20:48:42 2015 
*filter 
:INPUT ACCEPT [495:53218] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [480:89217] 
:DOCKER - [0:0] 
-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 DOCKER -d 172.17.0.1/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT 
COMMIT 
# Completed on Thu Apr 30 20:48:42 2015 
+0

非常感谢,它是我找到默认docker配置来重置我的iptables规则的唯一职位,非常完美! – meucaa 2017-06-20 13:16:22

7

如果您在主机上运行Ubuntu,则可以使用iptables-save实用程序在启动docker守护进程后将iptables规则保存到文件。然后,一旦冲洗旧规则,您可以简单地使用已保存的规则文件恢复原始码头规则。

如果您不想恢复所有旧的iptables规则,则可以更改已保存的规则文件以仅保留您需要的规则文件。

如果您正在运行另一个操作系统,您可能会找到类似的选择。

+1

码头工的规则总是一样吗?我可以将它们永久添加到我的iptables-restore配置文件中吗? – Hubro 2016-06-01 08:31:16

+0

详细说明:我使用iptables-persistent和自定义规则文件作为防火墙。任何时候我需要打开一个端口,我编辑我的规则文件并使用'iptables-apply'应用它。我在规则文件中保留了一个干净的结构和大量的文档注释,因此覆盖它不是一个选项。 – Hubro 2016-06-01 08:41:34

+0

小心保存/恢复规则,因为容器的IP在重新启动时可能会改变! – pHiL 2016-10-27 09:28:44