149

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

我是否应该担心拥有大量未运行的容器?我应该docker rm在非运行容器上发布吗?

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

4

5 回答 5

76

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

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

如果您在运行包含大量停止容器的 docker 命令时确实注意到速度变慢,则可能是 docker 中的一个错误,您应该提交一个错误。

于 2013-06-10T13:21:41.750 回答
68

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

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

上面显示默认情况下容器不会被删除,但添加--rm=true或只是简写--rm会像这样工作:

sudo docker run -i -t --rm ubuntu /bin/bash

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

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

watch -n1 'sudo ls -c /var/lib/docker/containers'

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

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done
于 2014-02-20T03:57:14.373 回答
5

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

于 2014-07-09T07:58:18.687 回答
3

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

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

docker ps --size --filter "status=exited"

等效地,您可以运行: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
于 2018-05-27T06:04:54.003 回答
2

映像是文件系统和依赖项或特定应用程序/软件的一组特定目录的快照。快照是指在容器环境中运行具有基本配置的软件(例如 mysql、redis 等)所需的那些文件的副本。

当您使用镜像创建容器时,系统中的一小部分资源在命名空间cgroups的帮助下被隔离,然后镜像中的文件被复制到这个隔离的资源环境中。

因此,容器只占用磁盘空间。如果有未使用的容器,您应该删除它们,但不要删除图像,因为它们总是可以重复使用的。

于 2020-08-07T11:32:43.623 回答