docker和岸边

我在我的服务器上使用Shorewall作为简单的独立防火墙,并且也想使用Docker

通过使用Docker容器及其端口redirect docker设置自己的iptables规则/链,如果shorewall被重新启动,将会被终止。 所以容器将变得无法访问

有没有人设法保存/恢复docker规则在岸边墙重新启动或有没有人有另一种解决方法?

也可以看看:

  • 有类似问题的Shorewall邮件列表
  • GitHub Issue#2801 @ dotcloud / docker

以下configuration更改应确保Docker和Shorewall主机之间的stream量。 testingShorewall 4.5.21.9,但应适用于最新版本:

/etc/shorewall/shorewall.conf

确保IP转发已启用(大多数configuration项目是是/否,但是这是“开”):

IP_FORWARDING=On 

的/ etc /的shorewall /伪装

为您的私人Dockernetworking启用伪装(NAT)(如果您使用不同的networking,即您使用--bip=#.#.#.#/#启动泊坞窗,则相应地更改)。 将eth0更改为具有外部连接的主机上的任何接口:

 #INTERFACE:DEST SOURCE eth0 172.17.0.0/16 

的/ etc /的shorewall /接口

添加一个接口条目,以便Shorewall知道dock区域涉及的接口:

 #ZONE INTERFACE OPTIONS dock docker0 

在/ etc /的shorewall /区

创build一个新的区域; 注意, docker太长,会导致“无效的区域名称”错误。

 #ZONE INTERFACE dock ipv4 

在/ etc /的shorewall /政策

您可能希望允许Docker容器与主机 Internet进行通信,因此这是一个很好的起点:

 #SOURCE DEST POLICY # ...(other policies)... dock all ACCEPT # ...(other policies, catch-all)... 

如果您还没fw打开它,您可能还需要一个类似的从fwdockstream量的ACCEPT策略。

您可以根据需要在策略文件或规则文件中进一步收紧。 例如,上面没有明确允许外部stream量到达您的Docker容器; 检查你的其他区域/政策/规则。

由于Docker引入了networking隔离function,如果您想使用自定义networking,这里提到的其他解决scheme已经不够了。 Shorewall 5.0.6引入了对包括Dockernetworking在内的Docker的支持 。 这个:

  • 允许以任何顺序启动/停止/重启岸边墙和docker
  • 避免维护扩展脚本的需要

只是在我的箱子里弄明白了。 确保/etc/shorewall.conf具有:

IP_FORWARDING=Yes

Docker依赖于转发,而我在所有服务器上将“puppet”设置为“No”。

更新:您可能还需要伪装来自Docker的WANstream量。

编辑/etc/shorewall/masq ,你需要一行类似于:

br0 172.17.0.0/12

在这种情况下,我的WAN接口实际上是br0(桥接器),但是你的可能是eth0。 (使用ifconfig查看您的接口和它们的IP地址)。 在我的机器上,docker使用172.17.0.0/24这是一个RFC1918专用地址范围。 这可能在其他系统上有所不同,但您可以再次使用ifconfig查看范围以查找docker0接口。

您可以通过创build在重新启动之前保存DOCKER链的扩展脚本来确保Docker规则集能够在shorewall重新启动后生存,然后再次恢复。 我刚刚提出了一个如何做到这一点的例子 ,虽然我相信这是唯一可能的方法。

docker服务可以在不影响正在运行的容器的情况下重新启动,并且可以在Shorewall重新启动后运行以重新加载docker工具特定的规则。 与集装箱联网中断的时间显然很短。

至less在我的几个Archlinux安装上是这样的。

刷新操作不会closuresiptable,所以如果你只是想刷新规则或策略,你可以运行刷新而不是重新启动:

 sudo shorewall refresh 

显然,如果你真的需要重新启动shorewall,问题仍然存在。 然后,您必须重新启动Docker并重新启动容器。

一个可能的select是使用–net = host选项运行Docker,允许容器化的应用程序访问主机networking,而不需要ip转发和NAT。