1. 程式人生 > >docker、firewalld和iptables之間的關係

docker、firewalld和iptables之間的關係

要注意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