docker启动失败

Catalogue
  1. 1. 异常一
  2. 2. 异常二
  3. 3. 异常三
  4. 4. 异常四
    1. 4.1. 查看日志发现如下警告
    2. 4.2. 解决方法
  5. 5. 异常五
  6. 6. 卸载docker

异常一

起因:前台反馈部署容器失败,进入服务器后发现docker无法启动

尝试重启服务(systemctl restart docker),但是还是不行
出现以下状况
2.png

查看docker状态
1.png

使用dockerd查看,发现这是只读文件系统
3.png

将其重新挂载,重启服务
4.png

发现还是不行,dockerd一下
5.png

发现无法连接/run/containerd/containerd.sock,启动失败次数太多导致停止启动

查了很多的解决办法,这一篇很OK:解决Linux docker启动不了的问题
这个方法来自Docker daemon and Containerd dockerd out of sync in 18.09 #421的issue

先将containerd停掉,再启动(直接重启不管用)

1
2
3
4
5
systemctl stop containerd
systemctl start containerd

#启动docker
systemctl start docker.service

Linux中排查docker启动过程,可以通过如下思路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#查看docker的状态
sudo docker info
#启动正常输出client 和 server的信息

#通用查看docker状态的方式
systemctl status docker.service


#启动失败 查看docker的日志,
journalctl -u docker.service
或者直接,
dockerd

#根据启动失败日志分析原因,如果是文件权限相关,则修改权限

异常二

error while creating mount source path ‘/data1’: mkdir /data1: file exists

可能是短时间多次重启导致

1
2
3
4
5
6
Job for docker.service failed because start of the service was attempted too often.

See "systemctl status docker.service" and "journalctl -xe" for details.To force a start use "systemctl reset-failed docker.service" followed     by "systemctl start docker.service" again.

systemctl reset-failed docker
systemctl start docker

异常三

无法删除docker目录(rm: 无法删除”/var/lib/docker/overlay/XXXXXXXXXXXXXX/merged”: 设备或资源忙)

异常四

docker启动失败:Your kernel does not support cgroup memory limit

查看日志发现如下警告

1
2
3
4
5
WARN Your kernel does not support cgroup memory limit 
WARN Unable to find cpu cgroup in mounts
WARN Unable to find blkio cgroup in mounts
WARN Unable to find cpuset cgroup in mounts
WARN mountpoint for pids not found

解决方法

这是在ubuntu或其他基于Debian的系统上才会出现的问题,原因是系统默认未开启swap限制。(开启后会使系统内存占用多1%,性能下降约10%,即使没有运行docker)

修改系统的/etc/default/grub file文件,加一行

1
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

上一步是固定的
下一步就多了

1
Run: “sudo update-bootloader –refresh”

或者是更新系统的GRUB:

1
update-grub

这应该是不通版本更新GRUB的方法吧
最后reboot
我是直接reboot的,然后就OK了

参考链接

异常五

can’t create unix socket /var/run/docker.sock: is a directory

解决方法

1
2
3
4
#保守点,把 docker.sock 重命名
cd /var/run $$ mv docker.sock docker.socker_backup
#或者直接删除
rm -rf /var/run/docker.sock/

卸载docker

  1. 列出docker所有的包

    1
    yum list installed|grep docker
  2. 删除docker的包

    1
    yum -y remove docker.x86_64 docker-client.x86_64 docker-common.x86_64
  3. 删除已有镜像和容器(慎重,根据需要执行)

    1
    rm -rf  /var/lib/docker

卸载并重装docker