为什么 Docker 不删除停止的容器?

时间:2021-03-29 14:48:01

标签: docker

我是 Docker 的新手,刚刚开始。我拉了一个基本的 ubuntu 镜像,用它启动了几个容器,然后停止了它们。当我运行命令列出所有 docker 容器(甚至是停止的容器)时,我得到如下输出:

> docker container ls -a
   
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS                      PORTS     NAMES
099c42011f24   ubuntu:latest   "/bin/bash"   6 seconds ago    Exited (0) 6 seconds ago              sleepy_mccarthy
dde61c10d522   ubuntu:latest   "/bin/bash"   8 seconds ago    Exited (0) 7 seconds ago              determined_rosalind
cd1a6fa35741   ubuntu:latest   "/bin/bash"   9 seconds ago    Exited (0) 8 seconds ago              unruffled_lichterman
ff926b6eba23   ubuntu:latest   "/bin/bash"   10 seconds ago   Exited (0) 10 seconds ago             cool_rosalind
8bd50c2c4729   ubuntu:latest   "/bin/bash"   12 seconds ago   Exited (0) 11 seconds ago             cranky_darwin

我的问题是,docker 默认不删除已停止的容器是否有原因?

2 个答案:

答案 0 :(得分:1)

您提供的示例表明您正在使用 Ubuntu 容器来运行 bash。虽然这是学习 Docker 时相当常见的模式,但它不是 docker 用于在生产场景中的,这是 Docker 关心并正在优化的。

Docker 用于在具有给定配置的容器内部署应用程序。

假设您建立了一个数据库容器来保存有关您的应用程序的信息。然后您的 docker 主机出于某种原因重新启动,并且该数据库默认消失。那将是一场灾难。

因此,Docker 假设您要保留容器、映像、卷等要安全得多,除非您明确要求删除它们并决定这是您想要的当您启动它们时,例如使用 docker run --rm <image>

答案 1 :(得分:0)

在我看来,这可能有一些原因。考虑以下条件:

我构建镜像并启动容器(生产环境,出于某种原因我停止了当前容器,对镜像进行了一些更改并运行另一个实例,因此具有新名称的新容器正在运行。

我发现新容器没有按预期正常工作,所以现在我有了旧容器,我可以运行旧容器并停止新容器,这样客户就不会遇到任何问题。< /p>

但是如果容器在停止后被自动删除怎么办?

简单的答案,我只会失去我的客户(甚至是我的工作):) 一个人会被添加到失业人员中:D

正如@msanford 提到的,Docker 假设您想要保留数据、卷等,因此您可能会在需要时重新使用它们。

由于 Docker 用于部署和运行应用程序(就像 WordPress 和 MySQL 一样简单,但在共享主机上安装有一些差异),因此通常它不仅仅用于运行 bash

通过运行 bashsh 之类的东西来查看容器的内容,在第一步学习 Docker 肯定是好的。