2015-02-09 100 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

相關問題