为什么Docker不移除停止的容器?
我是Docker的新手,刚刚开始。我拉了一个基本的ubuntu图像,用它启动了几个容器,并停止了它们。当我运行命令列出所有docker容器(甚至停止的容器)时,我得到如下输出:为什么Docker不移除停止的容器?,docker,Docker,我是Docker的新手,刚刚开始。我拉了一个基本的ubuntu图像,用它启动了几个容器,并停止了它们。当我运行命令列出所有docker容器(甚至停止的容器)时,我得到如下输出: > docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 099c42011f24 ubuntu:l
> 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的最大优势之一。当您知道容器确切包含图像中的内容时,设置容器要比尝试进行长时间的增量更新容易得多。