事件简介:
周末出现了一次偶然的停电事故,供电恢复后,按照惯例重启服务器,并重新运行各项服务。然而,一台Ubuntu 16.04服务器的Docker容器无法启动了……
1. 启动容器报错
# docker start nginx_test
Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown
Error: failed to start containers: nginx_test
错误信息指出:cgroup的挂载点不存在!
2. 手动挂载cgroup
从网络查询可知,很多用户都遇到过该错误,一个临时的解决办法是执行以下两条命令:
# sudo mkdir /sys/fs/cgroup/systemd
# sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
由于这仅仅是一个临时处理办法,系统重启后失效。因此,重启系统后,需要再次执行以上命令,才能正常启动容器,目前暂时没有找到可行的持久化解决方案。
参考资料:https://github.com/docker/for-linux/issues/219
3. 再次尝试启动容器,出现新的报错
# docker start nginx_test
Error response from daemon: OCI runtime create failed: container with id exists: 6d3477dce19d76a2c22f21e5140a290a5dc16aa23c3ef0cf45600ad2a7b806b8: unknown
Error: failed to start containers: nginx_test
以上错误信息较容易理解:由于运行时已经存在,创建运行时失败!
4. 删除错误的容器运行时信息
以上错误是我们第一次启动容器失败造成的:容器虽然启动失败,但已经产生了一些垃圾信息。
我们需要到容器运行时目录,列出运行时信息,删除启动失败的容器运行时ID文件夹:
# cd /run/docker/runtime-runc/moby
# ll
total 0
drwx------ 6 root root 120 7月 4 22:05 ./
drwx------ 3 root root 60 7月 4 22:02 ../
drwx--x--x 2 root root 80 7月 4 22:05 6d3477dce19d76a2c22f21e5140a290a5dc16aa23c3ef0cf45600ad2a7b806b8/
# rm -rf 6d3477dce19d76a2c22f21e5140a290a5dc16aa23c3ef0cf45600ad2a7b806b8/
5. 第三次启动容器,似乎启动成功
# docker start nginx_

本文记录了一次因停电导致的Docker容器启动问题排查过程,包括cgroup挂载失败、容器运行时错误及权限问题等,并最终通过开启特权模式解决了问题。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



