限制网络访问,但为正在运行的Docker容器允许特定的IP



我尝试使用一个docker容器,其中只有特定的IP地址可以从运行的容器中访问。iptables只能在具有特权的docker容器中工作。但是用户可以自己更改iptables。一个好主意是用dockerfile和iptables创建一个docker映像。但在创造一个形象的同时,特权是没有选择的。有人知道如何解决这个问题吗?

最佳

每个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在容器的网络名称空间中运行命令:

nsenter -t $pid -n iptables ...

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

最新更新