Linux服务器安装Docker,启动失败

在Linux服务器上安装Docker后,启动时遇到'无法启动Docker应用的容器引擎'的错误。通过执行'dockerd'命令找到报错原因:'overlay2.override_kernel_check'选项未知和网络控制器初始化失败。解决方案是修改daemon.json文件的storage-driver,并处理服务器路由表中的IP重叠问题,避免与Docker桥接IP冲突。重启Docker并设置开机自启动后,问题得以解决。

1  背景

    Docker启动失败的原因和使用了阿里云的源有关。

    如果大家有使用到阿里云的源仓库,可以继续看下是否也可以解决问题。

2  启动失败

    在Linux服务器上安装docker,执行docker 和docker version没有问题。但是执行docker images等命令报错,按照提示首先

    执行:systemctl status docker

     可以看到,报错信息为“无法启动Docker应用的容器引擎”,这里其实只能看到启动失败,状态为failed,没有更多提示信息。

 3  查看具体报错 & 解决

     执行命令:dockerd

       这时,我们发现已经找到了正确的debug方式了:这里报错的具体信息为“启动守护进程时,初始化graphdriver失败:overlay2.override_kernel_check选项未知”。

       这时我们需要去daemon的json配置文件:/etc/docker/daemon.json,将stroage-driver替换一下。

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
    "log-opts": {
      "max-size": "100m"
    },
    "storage-driver": "overlay2",
    "storage-opts": [
      "overlay2.override_kernel_check=true"
    ]
    ## 替换成下面
    "storage-driver": "overlay"
}

        然后尝试启动docker:systemctl start docker ,同样用dockerd命令看到有以下错误:

         这里意思是:“守护进程初始化网络控制器报错:地址列表没有可用的IP”。这是为什么呢?这是因为Docker会检查bridge list里的IP,如果发现有和服务器或者路由表IP有重叠,就会丢弃该IP,导致报错。这时,我们查看阿里云服务器路由表:route -n

           可以看到,172网段其实是和Docker的list bridge里有重叠。所以我们可以手动增加网卡,如图中所示:

sudo ip link add name docker0 type bridge
sudo ip addr add dev docker0 172.17.0.1/16

            再重启docker应该就可以了:systemctl start docker

            设置docker开机自启动:systemctl enable docker            

4  总结

    我这边遇到的问题和解决方法就是上面这样。也可以参考这篇博客:https://blog.youkuaiyun.com/longxing_123/article/details/78044840

           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值