如何解决网桥错误导致docker启动失败的问题

分类:计算机 | 微服务 | docker | 综合 138
更新:2021-03-27 08:47:20
编辑

问题说明

最近在往docker里面添加一个容器时出现了问题,于是准备重启一下docker服务,谁知道启动不了了,使用dockerd命令启动docker daemon时报错:Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: Could not create nat/DOCKER chain,错误如下:

使用命令:systemctl start docker.service启动docker的话也会报错:Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details,然后使用命令:systemctl status docker.service查看详细的报错信息:

问题分析

在网上查了很多解决方法,大概有以下几类:

  1. 删除目录(/var/lib/docker/network/):rm -rf /var/lib/docker/network/
  2. 手动添加下docker0网桥:

    brctl addbr docker0
    ip addr add 172.17.0.1/16 dev docker0
    ip link set dev docker0 up
    systemctl restart docker
    
  3. 在/etc/docker/daemon.json中添加内容,然后重新加载daemon.json配置(systemctl daemon-reload),启动docker:

    { "graph": "/mnt/docker-data", "storage-driver": "overlay" } 
    
  4. 如果daemon.json中配置了国内镜像的话将daemon.json文件后缀改为.conf,然后重新加载daemon.json配置(systemctl daemon-reload),启动docker
  5. 卸载docker,重新安装:

查询安装过的包

yum list installed | grep docker

本机安装过旧版本

docker.x86_64,
docker-client.x86_64,
docker-common.x86_64

删除安装的软件包

yum -y remove docker.x86_64
yum -y remove docker-client.x86_64
yum -y remove docker-common.x86_64

把yum包更新到最新

sudo yum update

安装docker

sudo yum install docker

可惜的是,上面的方法试了以后都没有解决我的问题。

问题解决

最后在一篇文章里Docker 自定义网桥后,无法正常启动问题找到了解决方法:

就是新建自定义网桥docker_new0:

brctl addbr docker_new0

然后docker就可以正常启动使用了,感觉很神奇,还不明白具体是怎么回事,后面会深入研究一下背后的原理。