如何避免使用太多容器压碎Docker?
我的故事
曾几何时,我从一个PHP laravel队列中调用Docker来处理数以千计的媒体文件。 我的代码将为我想完成的每个任务创build一个新的容器(例如“process”,“search”,“slice”等)。 然后我去睡觉,灾难来袭。 我醒来时发现一个1TB的日志文件,以及各州的几十万个容器。
Docker不能再工作了。 就像在我inputdocker version
(或者docker version
)的时候,它只是坐在那里,凝视着它。 我想避免重新安装,但是我不能通过标准docker rm $(docker ps -a -q)
删除容器,因为Docker变得非常非常郁闷。
我的问题
-
如何在Docker守护进程没有响应的情况下移除docker容器?
-
我的代码是使用Docker作为使用docker API的可执行文件。 未来我还需要额外的步骤清理自己的代码?
-
总的来说,我已经注意到,当我尝试同时旋转太多(即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)
我做了一些挖掘。
如何在Docker守护进程没有响应的情况下移除docker容器?
在Ubuntu中,容器存储在/var/lib/docker/containers
目录中。 删除该目录的内容,事情就好多了。 这将根据您的系统和安assembly置而生活在其他地方。
另外,对于任何人都好奇,有大约25万个集装箱必须被删除。 鉴于我不得不使用INCREDIBLY DANGEROUS的文件数量: ls /var/lib/docker/containers | xargs -n200 rm -rf
ls /var/lib/docker/containers | xargs -n200 rm -rf
< – 不要input你的命令行,如果你不知道你在做什么。
我使用Docker作为从代码中使用API调用的可执行文件。 未来我还需要额外的步骤清理自己的代码?
如果容器不能再次使用,那么在完成之后,您应该正式“移除”它。 在命令行上,这将使用docker rm $(containername)
,在代码中完全取决于如何访问docker。 我听说你也可以使用docker run --rm
,closures后会清理它。
我发现,即使试图以编程方式删除,也会有容器不能closures的情况。 为了防止我设置一个定期docker ps -a | awk '{print $1}' | xargs docker rm
的cron docker ps -a | awk '{print $1}' | xargs docker rm
我注意到,当我尝试同时旋转太多(即20个)容器时,Docker容易超时。
一旦我清除了事情就停止了,但是我仍然认为我应该使用更像Docker Swarm的东西来处理这个用例。 在我的情况下,我决定只是设置生产环境,以消除需要泊坞窗(这是使用多个线程)。