我应该关注多余的,未运行的Docker容器吗?

vel*_*lo9 138 docker

每个docker run命令或RUNDockerfile中的每个命令都会创建一个容器.如果容器不再运行,仍然可以看到它docker ps -a.

我是否应该关注拥有大量非运行容器?我应该docker rm在非运行容器上发行吗?

我不确定这些非运行容器会产生什么性能或内存/存储损失.

Ken*_*ane 72

未运行的容器除磁盘空间外不占用任何系统资源.

自己清理起来通常很好,但是如果你有很多人坐在它周围,它根本不应该减慢性能.

如果您在运行包含大量已停止容器的docker命令时发现速度变慢,则可能是docker中的错误,您应该提交错误.


acu*_*ich 63

docker run文档描述了如何在容器退出时自动清理容器并删除文件系统:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)
Run Code Online (Sandbox Code Playgroud)

上面显示默认情况下容器没有被删除,但添加--rm=true或只是短手--rm将这样工作:

sudo docker run -i -t --rm ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)

当您从容器中退出时,它将自动删除.

您可以通过在一个终端窗口中列出您的docker容器来测试它:

watch -n1 'sudo ls -c /var/lib/docker/containers'
Run Code Online (Sandbox Code Playgroud)

然后在另一个窗口中运行此命令以运行多个docker容器,这些容器将在休眠10秒后自动退出.

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done
Run Code Online (Sandbox Code Playgroud)

  • 不是*问题*的直接答案,而是一个有趣的答案,可以让用户深入了解docker背后的机制.谢谢! (4认同)
  • `-rm`已被弃用,并将在某个时候删除,请改用`--rm`. (3认同)

zer*_*ood 5

如果您运行带有卷的容器并且不使用docker rm -v将其删除,则在删除容器后不会删除该卷.此外,vfs存储驱动程序也存在问题.如果忘记清理,卷会占用磁盘空间.


Fra*_*urt 5

我不确定这些不运行的容器会产生哪些性能或内存/存储损失。

为了评估未运行的 Docker 容器使用了多少存储空间,您可以运行:

docker ps --size --filter "status=exited"
Run Code Online (Sandbox Code Playgroud)

同样,您可以运行:docker container ls --filter "status=exited"

您还可以使用命令docker system df(2017 年 1 月 Docker 1.13.0 中引入)查看 docker 磁盘使用情况,例如:

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B
Run Code Online (Sandbox Code Playgroud)