一开始报错,只是模糊的知道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
参考文档: