2015-02-09 101 views
1

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

最佳

+0

在主机上(在FORWARD链中)创建iptables,而不是在Docker容器中。 – larsks 2015-02-09 13:07:58

+0

但是,我如何处理不同的码头实例不同的IP? – user1200794 2015-02-09 13:21:43

回答

3

每个搬运工人容器都有一个唯一的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 run --name example -d myimage 

你可以这样获得PID是容器:

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

然后用nsenter到容器的网络命名空间中运行命令:

nsenter -t $pid -n iptables ... 

这些命令将运行而不是在容器内运行的命令的功能限制。

+0

使用nsenter添加iptables规则看起来不错。有关如何使这些规则在容器启动时持久化/恢复的任何提示? – 2018-02-13 22:20:28

+0

我不认为有一个很好的方法来实现这一点。没有太多的努力,你可以做的最好的事情就是将所有必要的命令放在一个脚本中,这样你只需要运行一个命令就可以重新安装一些东西。 – larsks 2018-02-15 12:29:30

相关问题