Docker云计算笔记菜鸟

快速笔记:解决群晖Docker无法启动容器OCI runtime create failed: container with id exists报错

此笔记记载了本人在使用群晖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”}.

快速笔记:解决群晖Docker无法启动容器OCI runtime create failed: container with id exists报错插图快速笔记:解决群晖Docker无法启动容器OCI runtime create failed: container with id exists报错插图1

环境:

硬件:群晖420+

DSM:DSM 6.2.3-25426 Update 3

Docker:18.09.0-0513

问题重现:

  1. 首次安装了CentOS官方镜像,名称CentWeb,版本Latest,启用Init,启用“自动重启”,运行正常
  2. 再次创建第二个Docker从CentOS官方镜像名称CentKMS,使用同样方法,启用init,启用“自动重启”功能,启动失败,显示错误信息OCI runtime create failed: container with id exist
  3. 删除名称CentKMS的容器,下载第三方luodaoyi/KMS-Server:latest,创建容器名KMSServer,启动依然提示错误信息OCI runtime create failed: container with id exist
  4. 尝试将容器CentWeb关闭,再次开启KMSServer,结果报错,尝试开启CentWeb,也报错,所有容器均无法启动。
  5. 重启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可以自动上线,至此问题已经解决。

快速笔记:解决群晖Docker无法启动容器OCI runtime create failed: container with id exists报错插图2

 

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 版权协议,转载请附上原文出处链接和本声明!]