此笔记记载了本人在使用群晖420+的Docker时遇到故障“OCI runtime create failed: container with id exists”的症状、排查流程以及故障缓解方法。
[本文为AndyX.Net原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明!]
[如果本文章帮助到了您,请在记得文章末尾“打赏”作者,感谢!]
展开索引
症状:
以最高权限装载第一个Container之后,尝试启动第二个Container的时候显示报错:Start container KMSServer failed: {“message”:”OCI runtime create failed: container with id exists: a55eeb0878a37c96fe560d606e53721b47db707f5468011ba026c5eef1c6c84f: unknown”}.
环境:
硬件:群晖420+
DSM:DSM 6.2.3-25426 Update 3
Docker:18.09.0-0513
问题重现:
- 首次安装了CentOS官方镜像,名称CentWeb,版本Latest,启用Init,启用“自动重启”,运行正常
- 再次创建第二个Docker从CentOS官方镜像名称CentKMS,使用同样方法,启用init,启用“自动重启”功能,启动失败,显示错误信息OCI runtime create failed: container with id exist
- 删除名称CentKMS的容器,下载第三方luodaoyi/KMS-Server:latest,创建容器名KMSServer,启动依然提示错误信息OCI runtime create failed: container with id exist
- 尝试将容器CentWeb关闭,再次开启KMSServer,结果报错,尝试开启CentWeb,也报错,所有容器均无法启动。
- 重启NAS,容器CentWeb恢复运作,但是KMSServer依然无法运作。
故障排查:
1.使用SSH登录群晖,并切换至root账户
2.检查Docker进程,显示Container状态为Created,但是并没有启动
root@nas:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9774cfebe013 luodaoyi/kms-server:latest "/bin/sh -c 'vlmcsdm…" 6 days ago Created 0.0.0.0:1688->1688/tcp KMSServer 4a9b4ca2b8fe centos:latest "/usr/sbin/init" 2 months ago Up 13 hours 0.0.0.0:23->22/tcp CentWeb
3.搜索Docker日志文件位置
root@nas:/var/log# find ../ -name *docker* ../packages/Docker/scripts/synodockerlogcollector.sh ../packages/Docker/conf/upstart/pkg-Docker-dockerd.conf ../log/Docker/docker.log
4.删除所有Docker日志,重新启动Docker服务
5.使用tail -f命令监测docker日志/log/Docker/docker.log,并准备复现问题
root@nas:/var/log/Docker# tail -f /var/log/Docker/docker.log 2021-03-05T22:14:25+08:00 NAS docker[15295]: ERRO[47569] a5fd8a554626d5ff5388b76b02d119a8e5f5cc40fbeb95012c9dc194fe0f328b cleanup: failed to delete container from containerd: no such container 2021-03-05T22:14:25+08:00 NAS docker[15295]: ERRO[47569] Handler for POST /containers/luodaoyi-kms-server1/start returned error: cgroups: cannot find cgroup mount destination: unknown
6.根据上面Logs的信息,我们可以清楚的看到当执行Container Start的操作时候,有个关键提示:“returned error: cgroups: cannot find cgroup mount destination”。这个报错很明显了,问题被指向了“无法挂载cgroup”。
7.尝试谷歌搜索,在Docker的Github上找到了一样的问题,并且有了临时解决方案。
https://github.com/docker/for-linux/issues/219
root@nas: sudo su root@nas: mkdir /sys/fs/cgroup/systemd root@nas: mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
由于群晖系统比较特殊,默认是不能使用额外的安装包(虽然有很多方法可以装载ipkg,但是为了安全和稳定就那就先放一放)
8. 重新尝试启动Container,启动成功!进一步测试重启群晖,然后再次检查Container可以自动上线,至此问题已经解决。
P.S.
1:尝试过提交工单给群晖技术支持,但是很遗憾,似乎他们也帮不上什么忙。
2:搜索到Github上有发布过针对于解决此问题的cgroupfs-mount包,下次有空在试试,感兴趣的朋友也可以自行尝试:https://github.com/tianon/cgroupfs-mount
3: 如果你使用Ubuntu:latest镜像遇到了这个问题,请尝试删除在环境bash中的任何定义(例如/usr/sbin/init)。
【2021-06-05 Update】群晖官方在Docker套件版本20.10.3-05521中修正了这个问题:
新功能:升级Docker Daemon至20.10.3版本。
问题修正:修正在Docker 18.09.0中运行CentOS容器导致无法运行其他容器的问题。
(全文完)
[本文为AndyX.Net原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明!]