正文
今天让将服务器做了 raid 磁盘整列中一块坏了的硬盘给换了下来,因为不支持热插拔,所以就重启了下服务器,结果:docker 安装 jenkins 是边出问题了。报错信息如下:
[root@qijing0 jenkins]# docker run -d -v jenkins_home:/home/data/jenkins -p 8080:8080 -p 50000:50000 -v --restart=on-failure jenkins/jenkins:lts-jdk11 9680f33ac025f908eb6fd46018605c8863eccb66015bb3245327ea2a1dacf112 docker: Error response from daemon: driver failed programming external connectivity on endpoint frosty_bell (e1c3e0f5f896351def879cbb29f725d4d598380c97c95d893fda970b32044833): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 50000 -j DNAT --to-destination 172.17.0.3:50000 ! -i docker0: iptables: No chain/target/match by that name.
报错
这个报错其实是因为,在我们启动了 docker 后,对防火墙进行了操作导致的(我执行的操作是:systemctl stop firewalld)。
上面是表面原因,实质上是因为:docker 服务启动时定义的自定义连 DOCKER,当 centos7 firewalld 被清掉时,firewalld 启动或者重启额时候,将会从 iptables 中溢出 DOCKER 的规则,从而影响了 docker 的正常工作。当我们使用的是 systemd 配置docker 的时候,firewalld 会在 docker 之前启动,但是如果你在 docker 启动之后操作 firewalld,你就需要重启 docker 进程了。
解决办法:
systemctl restart docker
可以了
重启docker服务并重新生成自定义链DOCKER。