运行背景
之前centos7服务器上装了docker并且运行良好,但手残误操作导致服务器软重启,再次登录后docker服务启动不了
报错及解决
通过journalctl -xe
查看日志发现报错如下
Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: Iptables not found
docker.service: main process exited, code=exited, status=1/FAILURE
Failed to start Docker Application Container Engine.
Unit docker.service entered failed state.
于是通过yum安装iptables以及iptable-services
yum install -y iptables-services iptables-devel.x86_64 iptables.x86_64
安装之后再次执行systemctl start docker
仍然报错,百度后猜测是iptables服务未启动,于是通过systemctl start iptables
启动iptables,但仍然报错,继续通过journalctl -xe
查找原因
这个报错里面标红的是IPV4无法启动。所以就去查了关于IPV4无法启动如何解决,网上的解决方法是将/var/lib/docker/network/files
目录下的文件全部删除。因为里面的local-kv.db文件记录了docker的网络信息,centos重启可能导致了该文件的损坏,导致网络连接出了问题。但对我来说没用,另外,大家在做删除操作的时候一定要先备份,
后来看最上面在提示/sbin/iptables
找不到,就开始查看是不是真的没有,然后从别的服务器发现这个文件是链接的/sbin/xtables-multi
,我就也链接了一个。
再次重启docker未报错,但因为之前按IPV4删了/var/lib/docker/network/files
,重启docker会生成新的,然后原本的容器没办法直接docker start
,后来关闭docker服务,然后将备份的文件拷过来,再重启后容器恢复正常。
其它可能原因
在运行systemctl start docker
之前需要
- daemon-reload
systemctl daemon-reload
- 关闭防火墙
systemctl disable firewalld
- 检查是否已经有docker进程在后台运行
ps aux | grep docker
#如果有,kill -9 之后restart