Docker停电事件未解之谜

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

事件简介:

周末出现了一次偶然的停电事故,供电恢复后,按照惯例重启服务器,并重新运行各项服务。然而,一台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_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值