几分钟前,我的电脑崩溃了,显然是因为硬盘满了。在恢复模式下启动后,我发现 /var/log 中的 syslog 文件64GB很大。我将文件末尾保存在另一个分区上,然后将其删除。显然,docker 似乎是问题所在,因为我在文件末尾发现了很多这样的内容,并且有一个 docker 进程一直以 200% 的 CPU 运行。清除日志并终止 docker 后,一切似乎都正常了。
Nov 15 01:44:08 Elemental docker.dockerd[1120]:
time="2019-11-15T01:44:08.727060251Z" level=error
msg="failed to get event" error="rpc error: code =
Unavailable desc = all SubConns are in TransientFailure, latest connection
error: connection error: desc = \"transport: Error
while dialing dial unix /run/containerd/containerd.sock:
connect: permission denied\"" module=libcontainerd namespace=plugins.moby
Nov 15 01:44:08 Elemental docker.dockerd[1120]: time="2019-11-15T01:44:08.727116701Z"
...
等等。我希望这个问题不会再出现,但我仍然想知道这里可能发生了什么。
答案1
我同时通过 apt 和 snap 安装了 docker 包。因此,通过 snap 打包系统删除 docker 即可解决问题。
# apt list --installed | grep docker
docker/bionic,now 1.5-1build1 amd64 [installed]
docker-ce/bionic,now 5:19.03.5~3-0~ubuntu-bionic amd64 [installed]
docker-ce-cli/bionic,now 5:19.03.5~3-0~ubuntu-bionic amd64 [installed,automatic]
# snap list | grep docker
docker 18.09.9 418 stable canonical✓ -
# snap remove docker
docker removed
答案2
几个小时前,Cannonical 的某个人把事情搞砸了——它在启动板上被追踪——https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1852720
我的系统昨天只安装了 docker,和这里的其他人一样 - syslog 杀死了磁盘上的所有可用空间,从 snap 中清除 docker 有所帮助。
答案3
您有多个 docker 服务正在运行。dockerd 似乎正在尝试访问 containerd 的不同安装,并向 syslog 发送垃圾邮件。
就我而言,teamcity 代理和 docker 安装发生冲突。
sudo apt-get purge docker-ce
sudo apt autoremove
sudo rm -rf /var/lib/docker
sudo truncate -s 0 /var/log/syslog
运行上述命令并重新启动。一切顺利。
答案4
我也遇到了这个问题,所以为了防止其他人在这里徘徊,我可以描述对我有用的解决方案。我首先尝试了 Chris Sung 的建议,但没有奏效。
症状如下:
dockerb 的 CPU 使用率超过 200%,并且会不断使用 kill 命令重启
Philip Z. 看到系统日志中充满了巨大的文件。今天早上我进来的时候,我的整个硬盘里都塞满了一个 700GB 的文件。
首先删除这个大文件,这样你才能真正开始做事。它会再次开始填满,但你应该有一些时间。
sudo truncate -s 0 /var/log/syslog
然后删除 snap docker 安装。这是我的问题,而不是 docker-ce
sudo snap stop docker
sudo snap remove docker
我不确定这是否有必要,但我还是决定彻底摆脱 snap
sudo apt purge snap
您应该不再在 top 中看到 dockerb。然后,您可以重新运行日志截断器以删除执行上述命令时写入的任何垃圾。如果您像我一样搞砸了并完全删除了 syslog,请确保为新 syslog 授予正确的权限。
sudo cd /var/log
sudo touch syslog
sudo chown syslog:adm syslog
sudo service rsyslog restart