由于容器过载导致 Docker 崩溃,我该如何删除它们?

由于容器过载导致 Docker 崩溃,我该如何删除它们?

我的故事

曾几何时,我呼唤Docker从 PHP laravel 队列处理数千个媒体文件。我的代码会为我想要完成的每个任务创建一个新容器(例如“处理”、“搜索”、“切片”等)。然后我上床睡觉,灾难降临了。我醒来时发现一个 1TB 的日志文件,以及几十万个处于不同状态的容器。

Docker 不再工作了。当我输入docker version(或者docker anything就此而言)时,它只是呆在那里,一动不动。我无法通过标准删除容器,docker rm $(docker ps -a -q)因为 Docker 变得非常非常令人沮丧。

以下是有关我当前如何调用守护进程的相关信息:

$> sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock
INFO[0000] [graphdriver] using prior storage driver "aufs"

(Meanwhile in another terminal)
$> docker version
(insert infinite darkness here)

我的问题

  1. 如果 docker 守护进程没有响应,我该如何删除 docker 容器?

  2. 我使用 Docker 作为美化可执行文件,使用其 API 从代码中调用。将来我需要采取哪些额外步骤来清理代码?

答案1

嗯,我做了一些调查。

如果 docker 守护进程没有响应,我该如何删除 docker 容器?

在 Ubuntu 中,容器存储在/var/lib/docker/containers目录中。删除该目录的内容,一切就好多了。

此外,如果有人好奇的话,大约有 25 万个容器需要删除。考虑到我必须处理的文件数量ls /var/lib/docker/containers | xargs -n200 rm -rf

我使用 Docker 作为美化可执行文件,使用其 API 从代码中调用。将来我需要采取哪些额外步骤来清理代码?

如果不再使用容器,则应在完成后正式“删除”它。在命令行上,可以使用 来完成此操作docker rm $(containername);在代码中,这完全取决于如何访问 docker。

相关内容