docker、firewalld和iptables之間的關係
阿新 • • 發佈:2018-12-12
要注意docker命令中使用 -p 暴露埠時,實現需要依賴iptables。CentOS 7預設使用的是firewalld,但是是否需要關閉firewalld並啟動iptables呢?
參考多篇博文,答案應該是不不需要的。
Note. You need to distinguish between the iptables service and the iptables command. Although firewalld is a replacement for the firewall management provided by iptables service, it still uses the iptables command for dynamic communication with the kernel packet filter (netfilter). So it is only the iptables service that is replaced, not the iptables command. That can be a confusing distinction at first.
在實際使用過程中,沒有使用iptables.service,docker的埠轉發也是正常的,因為iptables一直都在。docker會建立自己的iptables鏈,如果firewalld重啟,docker建立的鏈也需要重新建立。
下面是停用firewalld服務,啟用iptables-services
#!/bin/sh
#停止firewalld服務 systemctl stop firewalld #禁用firewalld服務 systemctl mask firewalld yum install -y iptables yum update iptables yum install -y iptables-services systemctl enable iptables.service systemctl start iptables.service #暴露docker swarm需要的埠,如果不使用docker swarm不需要開啟埠 iptables -A INPUT -p tcp --dport 2377 -j ACCEPT iptables -A INPUT -p tcp --dport 7946 -j ACCEPT iptables -A INPUT -p udp --dport 7946 -j ACCEPT iptables -A INPUT -p tcp --dport 4789 -j ACCEPT iptables -A INPUT -p udp --dport 4789 -j ACCEPT service iptables save systemctl restart iptables.service #開啟轉發 echo 'net.ipv4.ip_forward=1'> /usr/lib/sysctl.d/00-system.conf systemctl restart network
直接使用firewalld
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --permanent --zone=trusted --add-port=xxxx/tcp# xxxx改為你希望的埠號
sudo firewall-cmd --reload