一开始报错,只是模糊的知道daemon.json写的有问题

然后死抠格式问题,无奈还是报错,感觉daemon.json书写成了玄学

直到后来找到了docker启动报错日志,问题才迎刃而解,顿时感觉这个问题变得通透了,不再是晕晕乎乎了

所以做技术,一定要有刨根问底的精神,知其然知其所以然,这样才会越做越通透,越做越轻松

首先我的daemon.json是这样的

{
  "log-driver": "json-file",
  "log-opts": {
    "cache-disabled": "false",
    "cache-max-file": "5",
    "cache-max-size": "20m",
    "cache-compress": "true",
    "max-file": "1",
    "max-size": "200m"
  },
  "registry-mirrors": ["xxx"],
  "insecure-registries":["xxx"]
}

重启之后报错,上面提示的两个命令也不能很好的看到报错

其实有一个命令可以很清楚的看到启动日志,就是

journalctl -u docker.service

打开日志之后,按shift+G跳到日志最下面,慢慢往上翻,这边可以可以清楚的看到原因是,不支持cache参数,可能是版本太旧了

 :q退出日志之后,索性把cache参数全部去掉,修改之后的daemon.json为

{
  "log-driver": "json-file",
  "log-opts": {
    "max-file": "1",
    "max-size": "200m"
  },
  "registry-mirrors": ["xxxx"],
  "insecure-registries":["xxxx"]
}

重启之后一切正常

 

总结:

当遇到docker无法启动的问题,可以通过查看启动日志解决

一般问题有以下几种:

1.daemon.json 格式有误

2.daemon.json中引用的模块不支持

 

 

另外看别人还遇到了其他状况,特地记录下:

这次是由于failed to start daemon: failed to dial "/run/containerd/containerd.sock": unknown service containerd.services.namespaces.v1.Namespaces: not implemented,启动失败次数太多导致停止启动,这个地方试了很多办法都没能搞定。。。

终于在Docker daemon and Containerd dockerd out of sync in 18.09 #421 这个issue中看到了这个方法,先将containerd停掉,再启动(发现直接restart不管用,):

systemctl stop containerd
systemctl start containerd

#启动docker
systemctl start docker.service

 

 

参考文档:

https://www.jianshu.com/p/58e5859d3670

posted on 2023-06-08 11:42  06  阅读(10816)  评论(0编辑  收藏  举报