天天看点

Docker无法启动解决方案

现象

莫名 o2o 进不去,报错。报错信息是 Redis 报错,提示连接不上。登上服务器查看 Docker中的进程,发现Docker 都不能运行,卡在那里。连 docker -v 命令也没反应。

处理过程

通过 Google / Baidu,查阅到报错信息的命令:

systemctl status -l docker.service

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: deactivating (stop-sigterm) since 一 2020-02-10 16:52:50 CST; 5h 43min ago
     Docs: https://docs.docker.com
 Main PID: 4826 (dockerd)
   CGroup: /system.slice/docker.service
           └─4826 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

2月 10 16:53:06 iZbp1fld0iwc92hyabexg7Z dockerd[4826]: time="2020-02-10T16:53:06.026173111+08:00" level=info msg="There are old running containers, the network config will not take affect"
2月 10 16:53:06 iZbp1fld0iwc92hyabexg7Z dockerd[4826]: time="2020-02-10T16:53:06.029425488+08:00" level=error msg="failed to register link for container ae535905aff60802046abd0dabc33cbf07290b7ca80ab5321336e42ca29da606: open /var/lib/docker/containers/ae535905aff60802046abd0dabc33cbf07290b7ca80ab5321336e42ca29da606/.tmp-hostconfig.json113550591: no such file or directory"
2月 10 16:53:06 iZbp1fld0iwc92hyabexg7Z dockerd[4826]: time="2020-02-10T16:53:06.034608101+08:00" level=error msg="Failed to remove container ae535905aff60802046abd0dabc33cbf07290b7ca80ab5321336e42ca29da606: No such container: ae535905aff60802046abd0dabc33cbf07290b7ca80ab5321336e42ca29da606"
2月 10 16:53:06 iZbp1fld0iwc92hyabexg7Z dockerd[4826]: time="2020-02-10T16:53:06.035169104+08:00" level=info msg="Loading containers: done."
2月 10 16:53:06 iZbp1fld0iwc92hyabexg7Z dockerd[4826]: time="2020-02-10T16:53:06.070446712+08:00" level=warning msg="Not using native diff for overlay2, this may cause degraded performance for building images: opaque flag erroneously copied up, consider update to kernel 4.8 or later to fix" storage-driver=overlay2
2月 10 16:53:06 iZbp1fld0iwc92hyabexg7Z dockerd[4826]: time="2020-02-10T16:53:06.071232563+08:00" level=info msg="Docker daemon" commit=74b1e89 graphdriver(s)=overlay2 version=19.03.1
2月 10 16:54:04 iZbp1fld0iwc92hyabexg7Z dockerd[4826]: time="2020-02-10T16:54:04.397719730+08:00" level=info msg="Processing signal 'terminated'"
2月 10 17:01:39 iZbp1fld0iwc92hyabexg7Z systemd[1]: [/usr/lib/systemd/system/docker.service:38] Unknown lvalue 'TasksMax' in section 'Service'
2月 10 17:14:47 iZbp1fld0iwc92hyabexg7Z systemd[1]: [/usr/lib/systemd/system/docker.service:38] Unknown lvalue 'TasksMax' in section 'Service'
2月 10 17:15:46 iZbp1fld0iwc92hyabexg7Z systemd[1]: [/usr/lib/systemd/system/docker.service:38] Unknown lvalue 'TasksMax' in section 'Service'
           

解决报错信息

关键信息:

Not using native diff for overlay2, this may cause degraded performance for building images: opaque flag erroneously copied up, consider update to kernel 4.8 or later to fix" storage-driver=overlay2

表明要升级内核了!

一、 查看当前版本

[[email protected] ~]# uname -r
3.10.0-514.26.2.el7.x86_64
           

二、导入新版内核的 yum 源

2.1 导入 elrepo 软件源的 GPG 公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
           
2.2 导入 elrepo 软件源

说明:该地址可以自动下载该源的最新的软件列表,无需修改地址。

rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 
           

下载链接可在 http://elrepo.org/tiki/tiki-index.php 更新,形如:

yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

三、下载并安装新的内核

3.1 启用软件源并下载安装最新稳定版内核
yum -y --disablerepo=* --enablerepo=elrepo-kernel install kernel-ml
           
3.2 设定 Grub 默认启动新内核

说明:如果手动修改过 Grub 的配置文件,以下命令可能无法执行成功。请自行修改 Grub 配置文件。

grub2-set-default 0
           
3.3 使用新的内核重启

四、检查设置 & 删除旧的内核

4.1 查看当前系统的内核版本号
uname -r
           

如果输出是 4.10 以上的版本,说明安装成功。

5.5.2-1.el7.elrepo.x86_64
           
4.2 删除旧内核

说明:删除旧内核的目的是为了防止 yum 更新旧版内核之后覆盖了 grub 默认启动项

yum -y remove kernel kernel-tools
           

五、后续操作

5.1 更新内核

kernel-ml 不支持使用 yum -y update 直接更新内核。

如果后续需要更新内核,请执行 3.1、3.2 和 3.3。

5.2 卸载旧内核

更新完重启之后,可使用 yum -y remove kernel-ml-<完整的版本号> 来卸载旧内核。

版本号可通过 rpm -qa | grep kernel 获取。

六、 参考

为 CentOS 7 安装最新稳定版的 Linux 内核

Linux内核引发的Docker安装失败问题