限制networking访问,但允许运行Docker容器的特定IP

我尝试使用一个泊坞窗容器,其中只有一个特定的IP地址应该从正在运行的容器中访问。 iptables只能在特权的docker容器中工作。 但是比用户可以自己更改iptables。 一个不错的想法是用dockerfile和iptables创build一个docker镜像。 但是在创build图像时没有特权的选项。 任何人有一个想法如何解决这个问题?

最好

每个docker容器都有一个唯一的IP地址,所以如果你想允许一个地址为172.17.0.21的容器,并且你希望它只能访问地址8.8.8.8,你可以这样做:

 iptables -A FORWARD -s 172.17.0.21 -d 8.8.8.8 -j ACCEPT iptables -A FORWARD -s 172.17.0.21 -j REJECT --reject-with icmp-host-prohibited 

也可以使用nsenter命令修改非特权容器的iptables规则。 例如,如果你启动一个Docker容器:

 docker run --name example -d myimage 

你可以像这样得到这个容器的PID:

 pid=$(docker inspect -f '{{.State.Pid}}' example) 

然后使用nsenter在该容器的networking名称空间中运行命令:

 nsenter -t $pid -n iptables ... 

这些命令将在没有在容器内运行的命令的能力限制的情况下运行。