我的故事
曾几何时,我从PHP laravel队列调用Docker来处理数千个媒体文件。我的代码将为我想完成的每个任务创建一个新容器(例如" process"," search"," slice" etc)。然后我去睡觉,灾难来袭。我醒来了一个1TB的日志文件,以及各个州的几十万个容器。
Docker不再工作了。就像在我输入docker version
(或docker anything
那样)时,它只是坐在那里凝视。我想避免重新安装,但我无法通过标准docker rm $(docker ps -a -q)
删除容器,因为Docker变得非常非常沮丧。
我的问题
如果docker守护程序没有响应,如何删除docker容器?
我的代码使用Docker API将Docker用作美化的可执行文件。我将来需要采取哪些额外的步骤来清理它们?
总的来说,我注意到当我尝试同时旋转太多(即20个)容器时,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)
答案 0 :(得分:0)
我做了一些挖掘。
如果docker守护程序没有响应,如何删除docker容器?
在Ubuntu中,容器存储在/var/lib/docker/containers
目录中。删除该目录的内容,事情就好多了。根据您的系统和安装配置,这将存在于其他地方。
此外,对于任何好奇的人来说,大约有25万个容器必须被移除。鉴于我必须使用难以置信的危险文件的数量:ls /var/lib/docker/containers | xargs -n200 rm -rf
< - 如果您不知道自己在做什么,请不要在您的命令行中输入。
我正在使用Docker作为一个美化的可执行文件,使用他们的API从代码中调用。我将来需要采取哪些额外步骤来清理它们?
如果容器不会再次使用,您应该在完成后正式“删除”它。在命令行上,这将使用docker rm $(containername)
完成,在代码中,它将完全取决于如何访问docker。我听说你也可以使用docker run --rm
运行docker,它会在关闭后清理。
我发现即使在尝试以编程方式删除之后,也会出现容器无法关闭的情况。为了防止我设置一个定期docker ps -a | awk '{print $1}' | xargs docker rm
我注意到当我尝试同时旋转太多(即20个)容器时,Docker很容易超时。
一旦我解决了问题,这就停止了,但是我仍然认为我应该使用更像Docker Swarm这样的用例。在我的情况下,我决定简单地设置生产环境以消除对那里的docker的需求(这是使用多个线程的地方)。