删除 Docker 容器
本文总结了关于删除Docker容器的七个关键点。
它侧重于docker container rm
命令,并包括如何根据容器状态进行删除,以及恢复方法和故障排除等其他内容。
1. Docker容器删除命令[#1]。
docker容器删除命令如下。
$ docker container rm [OPTIONS] CONTAINER [CONTAINER...]
这个rm
命令删除了一个或多个终止的容器。
你可以通过在CONTAINER
位置指定容器ID或名称来执行它。
注意,只有容器被删除,而不是docker镜像。
删除docker镜像的命令是docker image rm
,更多细节见此帖。
你还可以在[OPTIONS]位置添加三个选项:--force
、--link
和--volume
。--force
选项将在下面的 第四节 中介绍。
--link
选项删除了包含容器的链接。值得注意的是,这并不删除容器本身。
由于Docker推荐使用自定义网络而不是使用链接,这个选项可能会被废弃。目前,我们建议只在传统的代码中使用它。
--volume
选项意味着当你删除一个容器时,你也会删除与之相关的任何卷。
正如我们将在另一篇文章中介绍的,作为容器的存储空间的卷是一个独立的实体。
因此,当一个容器被删除时,卷不会被自动删除。
让我们通过一个例子来看看这个问题。下面的例子得到了一个所有容器的列表,得到了容器的ID,并删除了它
$ docker container ls --all
CONTAINER ID IMAGE COMMAND ...
6f3e40d12122 nginx "/docker-entrypoint.…" ...
$ docker container rm 6f3e
6f3e
$ docker container ls --all
CONTAINER ID IMAGE COMMAND ...
你可以看到,该容器已被成功删除,不再可见。
2. 恢复被删除的容器的替代方法
Docker没有提供一种方法来恢复被rm
命令删除的容器。因此,在发生意外删除的情况下,最好了解以下替代方法。
2.1. 用卷来管理数据
Docker卷是安全存储需要永久保存在容器中的数据或需要共享的数据的最佳方式。 正如在第1节中提到的,卷的清除是独立于容器的,所以要确保任何不应该从容器中清除的数据被存储在一个卷中。
2.2. 使用docker container commit命令创建一个新镜像
docker container commit
命令会创建一个新的镜像,其中包含当前容器中的所有变化。
因此,对于需要保持其当前状态的容器,你可以定期使用这个命令。
3. 删除容器失败的解决方法
如果你的Docker容器无法下降,有很多可能的原因。下面是五个最常见的原因和它们的解决方案。
3.1. 运行中的容器
Docker防止你丢弃一个正在运行的容器。
因此,一个好的做法是检查你要删除的容器是否正在运行,如果是,用docker container stop
命令杀死它,然后再删除它。
如果你确定该容器不会因为被强行删除而受损,你也可以按照第4节中关于如何强行删除一个容器的说明来删除它。
3.2. 容器被另一个容器使用
你还应该检查你要删除的容器目前是否被另一个容器所使用,因为如果是的话,你也将无法删除它。
一个容器可以通过卷(--volumes-from
选项)、链接(--link
选项)、网络(--network
选项)等与另一个容器相连。
在这些情况下,使用当前容器的其他容器必须在删除当前容器之前被删除。
3.3. 权限问题
如果当前用户没有适当的权限设置来使用Docker,那么删除一个容器可能会因为权限问题而失败。 请参阅 停止和终止Docker容器 - 7. 如果发生权限拒绝该怎么办。
3.4 其他服务器环境问题
除了上述情况外,如果服务器没有足够的磁盘空间,或者Docker守护程序工作不正常,容器可能会被拒绝删除。我们建议你检查这些方面。
4. 强制删除一个正在运行的容器[##4]。
强制删除一个正在运行的容器并不是一种推荐的做法。但是,如果一个容器不能正常工作,而且不能正常关闭,可能就需要这样做。
这就是 docker container rm
命令的--force
选项的用处。你可以像这样使用它
$ docker container rm --force CONTAINER
当强行删除一个容器时,一定要确保它不会影响其他容器、卷等,然后再继续。
5. 删除所有终止的容器
如果你的所有终止的容器都不再使用了,有一种方法可以用一个命令将它们全部删除。
$ docker container prune
当你输入这个命令时,Docker会再次询问你是否真的要删除所有终止的容器。 如果你回答是,它将继续删除所有终止的容器。
正如在第2节中提到的,没有办法恢复被删除的Docker容器,所以要谨慎使用这个命令。
6. 删除整个容器
我并不推荐这样做,但如果你真的想一次性删除所有的容器,不管它们是在运行还是停止......有一个办法。
$ docker container rm --force $(docker container ls -aq)
docker container ls -aq
命令查找了所有状态下的容器ID。
它以shell脚本的$()
语法,将这个ID列表作为参数发送给rm
命令。
如果列表中的任何一个容器正在运行,它们将不会被自然删除,所以我们需要添加--force
选项来强制删除它们。
7. 总结
在这篇文章中,我们总结了关于如何删除Docker容器的信息。
以docker container rm
命令为重点,我们介绍了如何根据容器的状态来删除它,以及恢复方法和故障排除。
我希望你在删除容器时发现它很有用。
