我应该担心多余的,未运行的Docker容器吗?


142

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

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

我不确定这些非运行中的容器会导致哪些性能或内存/存储损失。


1
docker exec之前已经添加了一个命令,请参阅docs.docker.com/reference/commandline/cli/#exec-它会从正在运行的容器中执行命令。
schmunk 2014年

仅供参考,如果你想了解如何删除旧集装箱,看到了这个问题:stackoverflow.com/questions/17236796/...
瑞安墙

Answers:


72

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

通常,在自己清理之后是好事,但是如果有很多人坐在那里,那根本就不会降低性能。

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


1
RUN命令的文档现已移至:docs.docker.io/en/latest/reference/builder/#run
aculich 2014年

63

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

4
没有直接回答这个问题,但一个有趣的答案,将给予用户一定洞察背后泊坞窗的机制。谢谢!
thaJeztah 2014年

3
-rm已弃用,并会在某些时候删除,请 --rm改用。
贝恩2015年

5

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


2

我不确定这些非运行中的容器会导致哪些性能或内存/存储损失。

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

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

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

您还可以使用命令docker system df(Docker 1.13.0中引入,2017年1月)查看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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.