2016-11-24 55 views
2

我放棄了。我在ubuntu 16.04下使用Docker 1.12.0加強了UFW。碼頭互聯網連接iptables = false

該機擁有2個接口 - 一個公開了(eth0)和一個就像我與以前的版本我配置「的iptables」是假的專用網絡(eth1的)

Server Version: 1.12.3 
Storage Driver: aufs 
Root Dir: /var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 15 
Dirperm1 Supported: true 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: null bridge host overlay 
Swarm: inactive 
Runtimes: runc 
Default Runtime: runc 
Security Options: apparmor seccomp 
Kernel Version: 4.4.0-47-generic 
Operating System: Ubuntu 16.04.1 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 1 
Total Memory: 488.5 MiB 
Name: image-base 
ID: 2473:FGJQ:MEEC:CEWY:BSLR:SYB5:EXMO:WJBE:7MMM:DIZH:NJQF:L5NA 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
WARNING: No swap limit support 
Insecure Registries: 
127.0.0.0/8 

所以碼頭工人不會改變我的防火牆。

但在最新版本的docker(11+)中,此命令有副作用 - 重啓後 - docker容器停止訪問網絡(ping www.google.com)。

我確認了一次又一次。 如何重現: - 停止搬運工守護

sudo systemctl stop docker 

我的iptables配置= FALSE通過將文件/etc/docker/daemon.json:

{ 
    "iptables" : false 
} 

(這是那裏唯一配置)

啓動守護進程:

sudo systemctl start docker 

docker run --rm python ping www.google.com 

即使會爲你工作 - 如果你重啓系統 - 它將停止工作......你有任何解決方案?

我檢查了我的iptables規則並重新啓動系統後,我失去了這些規則:

:PREROUTING ACCEPT [8:496]  
:INPUT ACCEPT [0:0]  
:OUTPUT ACCEPT [0:0]   
:POSTROUTING ACCEPT [0:0]  
:DOCKER - [0:0]  
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER   
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER  
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE  
-A POSTROUTING -s 172.18.0.0/16 ! -o br-a0b355ce53ac -j MASQUERADE  
-A DOCKER -i docker0 -j RETURN  
-A DOCKER -i br-a0b355ce53ac -j RETURN 
# same 
:DOCKER - [0:0]  
:DOCKER-ISOLATION - [0:0] 
# same 
    -A FORWARD -j DOCKER-ISOLATION  
-A FORWARD -o docker0 -j DOCKER  
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT   
-A FORWARD -i docker0 -o docker0 -j ACCEPT  
-A FORWARD -o br-a0b355ce53ac -j DOCKER  
-A FORWARD -o br-a0b355ce53ac -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A FORWARD -i br-a0b355ce53ac ! -o br-a0b355ce53ac -j ACCEPT   
-A FORWARD -i br-a0b355ce53ac -o br-a0b355ce53ac -j ACCEPT 
# same 
    -A DOCKER-ISOLATION -i br-a0b355ce53ac -o docker0 -j DROP  
-A DOCKER-ISOLATION -i docker0 -o br-a0b355ce53ac -j DROP  
-A DOCKER-ISOLATION -j RETURN 

謝謝!

+0

Docker在系統上通常與ufw搭配使用。你在系統上遇到docker + ufw會遇到什麼樣的麻煩? – programmerq

回答

2

碼頭網絡模型使用iptables爲您的容器設置互聯網連接。如果您明確不希望使用網橋或覆蓋網絡驅動程序的容器根本沒有任何網絡連接,那麼我只會設置iptables = false。

當您使用iptables = true啓動守護程序時,它將在您的防火牆中設置所需的規則。當碼頭工人關閉時,我不相信它會把這些規則撕下來,所以他們會堅持下去。這就是爲什麼你啓動docker後用iptables = false備份互聯網的原因。如果你想在重新啓動後在下一個docker啓動時保留這些規則,最好的辦法就是保持iptables = true。

+0

我明白了。我希望他們將這個「iptables」配置分隔爲「傳出」和「傳入」。因爲我確實希望碼頭允許我的容器進行傳出通信 –

+0

如果您發佈端口,則只會有「傳入」規則。如果你不這樣做,那麼實際上只有iptables規則才能爲該容器啓用outgong連接。 – programmerq

+0

我認爲我的問題是我的雲提供商不提供網絡安全配置,因此我必須使用UFW/iptables來定義我暴露給外部世界的端口。我想要一個簡單的方法來告訴我的機器將8080端口暴露給內部網絡,但不是外部世界,我不想將機器專用IP硬編碼爲碼頭綁定規則... –