在 Red Hat 8 上部署 Docker 27.3.0 后,需要为防火墙配置适当的策略,以允许 Docker 容器网络正常运行。以下是防火墙配置的详细步骤:
1.开启必要的端口
根据 Docker 的需求,默认需要开放以下端口:
-
2375 (TCP)
:非 TLS 的 Docker API(不推荐)。
-
2376 (TCP)
:启用了 TLS 的 Docker API(推荐)。
-
DOCKER 网络端口范围
:Docker 默认会分配随机的端口范围(容器的映射端口)。
可以通过以下命令开放端口:
sudo firewall-cmd --zone=public --add-port=2376/tcp --permanent sudo firewall-cmd --zone=public --add-port=2375/tcp --permanent
根据具体应用和容器运行的端口,按需添加更多端口规则,例如:
sudo firewall-cmd --zone=public --add-port=<应用容器映射的端口>/tcp --permanent
2.允许 Docker 服务自定义的桥接网络
Docker 默认会使用docker0
网桥。如果你的容器需要通过该桥接网络访问外部资源,需允许桥接网络的转发流量。
配置转发规则:
sudo firewall-cmd --zone=public --add-masquerade --permanent
重载防火墙:
sudo firewall-cmd --reload
3.为 Docker 服务启用 IP 转发
确保内核启用了 IP 转发功能,这对于容器间通信至关重要。
检查 IP 转发状态:
sysctl net.ipv4.ip_forward
如果返回值为0
,需要启用它:
sudo sysctl -w net.ipv4.ip_forward=1echo"net.ipv4.ip_forward = 1" | sudotee -a /etc/sysctl.conf
4.添加 Docker 的动态网络规则
Docker 服务启动后会动态创建 NAT 规则。如果你的防火墙规则阻止了这些动态规则的应用,可以直接信任 Docker 管理的网络接口:
允许 Docker 创建的接口:
sudo firewall-cmd --zone=trusted --add-interface=docker0 --permanent sudo firewall-cmd --reload
5.验证防火墙规则
执行以下命令,验证配置是否正确:
sudo firewall-cmd --list-all
6.注意事项
-
如果容器使用了自定义网络,请根据实际情况配置对应的防火墙规则。
-
如果你使用了
firewalld
与 Docker 同时管理 iptables,请确保iptables
的规则没有被覆盖。检查/etc/docker/daemon.json
中是否禁用了iptables
:json {"iptables":true}
如果没有该文件,可以创建并添加上述内容,随后重启 Docker 服务:
sudo systemctl restart docker
完成后,确保应用和容器间通信正常!