限制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 ...
这些命令将在没有在容器内运行的命令的能力限制的情况下运行。