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

为什么Docker不移除停止的容器?,docker,Docker,我是Docker的新手,刚刚开始。我拉了一个基本的ubuntu图像,用它启动了几个容器,并停止了它们。当我运行命令列出所有docker容器(甚至停止的容器)时,我得到如下输出: > docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 099c42011f24 ubuntu:l

我是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在默认情况下不删除停止的容器有什么原因吗?

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

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

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


因此,Docker更安全的做法是假设您希望保留容器、图像、卷等,除非您明确要求删除它们,并在启动它们时确定这是您想要的,例如,
Docker run--rm

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

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

我发现新容器不能像预期的那样正常工作,所以现在我有了旧容器,我可以运行旧容器并停止新容器,这样客户端就不会面临任何问题

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

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

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

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


当然,在第一步学习Docker是很好的,通过运行
bash
sh
来查看容器的内容。

例如,因为可能有人想重新启动它……为什么要Docker删除停止的容器?这就像花时间安装一台新计算机,然后在您想关闭它的任何时候将其重置为出厂设置。如果您想让容器自动移除,一旦停止,你可以从
--rm
标志@CWSites开始。我的假设是,所有的“新计算机的设置”都是docker映像本身所说的?当我可以使用docker图像旋转一个新容器时,为什么我要保留一个旧容器。如果你关闭计算机,但希望RAM/缓存中的数据安全,那么将旧容器放在周围不是更好的类比吗?@CWSites注意到,“容器总是从干净的板岩开始”实际上是使用Docker的最大优势之一。当您知道容器确切包含图像中的内容时,设置容器要比尝试进行长时间的增量更新容易得多。