如何避免使用太多容器破坏Docker?

时间:2015-12-10 00:07:56

标签: docker

我的故事

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

Docker不再工作了。就像在我输入docker version(或docker anything那样)时,它只是坐在那里凝视。我想避免重新安装,但我无法通过标准docker rm $(docker ps -a -q)删除容器,因为Docker变得非常非常沮丧。

我的问题

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

  2. 我的代码使用Docker API将Docker用作美化的可执行文件。我将来需要采取哪些额外的步骤来清理它们?

  3. 总的来说,我注意到当我尝试同时旋转太多(即20个)容器时,Docker很容易超时。我很乐意能够拨打那个拨号盘。

  4. 一些信息

    以下是我当前正在调用该守护程序的方式:

    $> 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 个答案:

答案 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

的cron
  

我注意到当我尝试同时旋转太多(即20个)容器时,Docker很容易超时。

一旦我解决了问题,这就停止了,但是我仍然认为我应该使用更像Docker Swarm这样的用例。在我的情况下,我决定简单地设置生产环境以消除对那里的docker的需求(这是使用多个线程的地方)。