解决Docker容器 iptables问题---docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql-test ...
一、问题如下
[root@echohye app]# docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
5ae9dc1c7bf16762e7064a5f3ab0396b1f5ba3a23e64997939730f27aa11eebb
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql-test (b428e451446b6b6bd1be1ea58ca6f66b632680b0756d6fe9c9411099c03dff5b): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
二、解决办法
经过查阅资料得知是docker0网桥的原因,解决上面报错问题需要进行一下步骤
1.kill掉docker所有进程
pkill docker
2.清空nat表的所有链
iptables -t nat -F
3.停止docker默认网桥docker0
ifconfig docker0 down
4.删除docker0网桥
brctl delbr docker0
5.重启docker服务
systemctl restart docker
6.重新运行最初指令
[root@echohye /]# docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
7097016ef0b1c57b6db110dff96b179f8989427c55b1501c36c1c1fb425ba5ce
[root@echohye /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7097016ef0b1 mysql:5.7 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-test