CentOS7关闭 firewalld 情况下创建运行重启带映射宿主机端口的容器没问题。一旦开启了 firewalld 之后尝试docker restart container就报如下错误:

Error response from daemon: driver failed programming external connectivity on endpoint grafana (7c185cce76b43aca4ad759cdaed7f6f40d2df9b7642f1420571ac7667fd4adcb):  (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.4 --dport 3000 -j ACCEPT: iptables: No chain/target/match by that name.
 (exit status 1))

Docker 会在 iptables 中创建一些策略,不过貌似 filter 表中的DOCKER chain 消失了,创建即可。

iptables -t filter -N DOCKER  # 如果不行那就
iptables -t nat -N DOCKER  # 根据报错响应新建

另外开启 firewalld 之后,容器之间的通讯,如果通过映射到宿主机的端口通讯,那么需要把 docker0网段(下面以默认的172.17/16为例)增加到 firewalld 的白名单中:

firewall-cmd --permanent --zone=trusted --add-source=172.17.0.0/16
firewall-cmd --reload
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐