如何避免使用太多容器压碎Docker?

我的故事

曾几何时,我从一个PHP laravel队列中调用Docker来处理数以千计的媒体文件。 我的代码将为我想完成的每个任务创build一个新的容器(例如“process”,“search”,“slice”等)。 然后我去睡觉,灾难来袭。 我醒来时发现一个1TB的日志文件,以及各州的几十万个容器。

Docker不能再工作了。 就像在我inputdocker version (或者docker version )的时候,它只是坐在那里,凝视着它。 我想避免重新安装,但是我不能通过标准docker rm $(docker ps -a -q)删除容器,因为Docker变得非常非常郁闷。

我的问题

  1. 如何在Docker守护进程没有响应的情况下移除docker容器?

  2. 我的代码是使用Docker作为使用docker API的可执行文件。 未来我还需要额外的步骤清理自己的代码?

  3. 总的来说,我已经注意到,当我尝试同时旋转太多(即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的东西来处理这个用例。 在我的情况下,我决定只是设置生产环境,以消除需要泊坞窗(这是使用多个线程)。