如何使用 docker container rm 命令删除容器

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 docker container rm 命令高效管理 Docker 容器。你将练习创建和删除基础容器,了解如何强制删除运行中的容器,探索删除容器时一并移除其关联匿名卷(anonymous volumes)的选项,最后学习如何高效清理所有已停止的容器。

通过动手实践,你将获得 Docker 容器生命周期管理的关键实操经验,从而能够清理 Docker 环境并有效管理资源。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/run -.-> lab-555120{{"如何使用 docker container rm 命令删除容器"}} docker/ls -.-> lab-555120{{"如何使用 docker container rm 命令删除容器"}} docker/ps -.-> lab-555120{{"如何使用 docker container rm 命令删除容器"}} docker/rm -.-> lab-555120{{"如何使用 docker container rm 命令删除容器"}} docker/pull -.-> lab-555120{{"如何使用 docker container rm 命令删除容器"}} docker/volume -.-> lab-555120{{"如何使用 docker container rm 命令删除容器"}} docker/prune -.-> lab-555120{{"如何使用 docker container rm 命令删除容器"}} end

创建与删除容器

在本步骤中,你将学习如何创建和删除 Docker 容器。容器是镜像的可运行实例,你可以通过 Docker API 或 CLI 来创建、启动、停止、移动或删除容器。

首先,让我们拉取一个简单的镜像用于创建容器。我们将使用 hello-world 镜像,这是一个极小的镜像,仅会打印 "Hello from Docker!" 后退出。

docker pull hello-world

你将看到镜像正在被拉取和下载的输出信息。

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

获取镜像后,我们可以基于它创建并运行容器。使用 docker run 命令:

docker run hello-world

该命令会从 hello-world 镜像创建新容器,执行镜像中指定的命令(即打印 "Hello from Docker!"),然后容器退出。你将在终端看到 "Hello from Docker!" 消息。

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

容器运行结束后会自动停止。你可以使用 docker ps -a 命令查看所有容器(包括已停止的)。

docker ps -a

输出会显示状态为 "Exited" 的 hello-world 容器,类似这样:

CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
<container_id>   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             <container_name>

现在我们来删除已停止的容器。使用 docker rm 命令后接容器 ID 或名称(可通过 docker ps -a 输出获取)。请将 <container_id> 替换为你的实际容器 ID。

docker rm <container_id>

删除成功后,终端会打印被删除容器的 ID:

<container_id>

执行 docker ps -a 再次验证,已删除的 hello-world 容器不应再出现在列表中。

docker ps -a

输出结果中不应包含你刚删除的 hello-world 容器。

强制删除运行中的容器

在上一步中,我们删除了一个已停止的容器。但你不能直接使用 docker rm 删除运行中的容器。本步骤将教你如何强制删除运行中的容器。

首先,我们创建一个持续运行的容器。使用 ubuntu 镜像并执行 sleep infinity 命令保持容器运行。若尚未获取 ubuntu 镜像,请先拉取:

docker pull ubuntu

现在以分离模式(-d)运行 ubuntu 容器,使其在后台持续运行:

docker run -d ubuntu sleep infinity

终端将输出代表容器 ID 的长字符串:

<container_id>

通过 docker ps 确认容器正在运行:

docker ps

输出应显示状态为 "Up" 的 ubuntu 容器:

CONTAINER ID   IMAGE    COMMAND         CREATED          STATUS          PORTS     NAMES
<container_id>   ubuntu   "sleep infinity"   About a minute ago   Up About a minute ago             <container_name>

尝试用 docker rm 删除这个运行中的容器(请替换 <container_id> 为你的实际容器 ID):

docker rm <container_id>

此时会看到错误提示,表明无法直接删除运行中的容器:

Error response from daemon: You cannot remove a running container <container_id>. Stop the container before attempting removal or use -f

如错误信息所示,你需要先停止容器或使用 -f(强制)参数。虽然优雅停止容器是推荐做法,但强制删除能更快速地移除运行中的容器(特别是当容器内进程无法及时响应停止信号时)。

使用 -f 参数强制删除运行中的容器(请替换 <container_id>):

docker rm -f <container_id>

终端将打印被删除容器的 ID:

<container_id>

执行 docker ps 验证删除结果,ubuntu 容器不应再出现在列表中:

docker ps

输出中不应包含你刚删除的 ubuntu 容器。

删除容器及其匿名卷

在本步骤中,你将学习如何删除容器及其关联的匿名卷。创建容器时,Docker 会生成卷来存储数据。匿名卷是指在创建时未明确命名的卷,通常由镜像 Dockerfile 中的 VOLUME 指令自动创建。

首先运行一个会创建匿名卷的容器。我们再次使用 ubuntu 镜像,并通过 -v 参数指定挂载点(冒号前不写名称):

docker run -d -v /data ubuntu sleep infinity

该命令会创建容器和一个挂载在容器内 /data 目录的匿名卷。终端将输出容器 ID:

<container_id>

现在检查容器查看已创建的卷(请替换 <container_id> 为你的实际容器 ID):

docker inspect <container_id>

在输出的 JSON 对象中,找到 "Mounts" 部分。你会看到 /data 的挂载信息,其中 "Name" 字段是随机生成的字符串,表明这是匿名卷:

...
"Mounts": [
    {
        "Type": "volume",
        "Source": "<volume_name>",
        "Target": "/data",
        "Consistency": "consistent",
        "BindOptions": null,
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],
...

也可以通过 docker volume ls 查看所有卷,匿名卷会显示在列表中:

docker volume ls

输出包含随机命名的匿名卷:

DRIVER    VOLUME NAME
local     <volume_name>

默认情况下,删除容器时其匿名卷会保留。先停止容器(请替换 <container_id>):

docker stop <container_id>

终端返回容器 ID:

<container_id>

现在删除已停止的容器(不删除卷):

docker rm <container_id>

再次检查卷列表,匿名卷仍然存在:

docker volume ls

接下来演示同时删除容器及其卷。先创建新容器:

docker run -d -v /data ubuntu sleep infinity

获取新容器 ID:

<new_container_id>

停止新容器(请替换 <new_container_id>):

docker stop <new_container_id>

使用 -v 参数删除容器及其匿名卷:

docker rm -v <new_container_id>

最后验证卷列表,新容器的匿名卷已消失,仅保留最初创建的匿名卷:

docker volume ls

批量删除所有已停止的容器

在本步骤中,你将学习如何一次性删除所有已停止的容器。使用 Docker 时,可能会积累大量已停止的容器,这些容器会占用磁盘空间。Docker 提供了便捷的命令来清理这些已停止的容器。

首先创建几个会自动停止的容器。我们使用 ubuntu 镜像并执行立即退出的命令:

docker run ubuntu echo "This container will stop immediately"

你将看到输出 "This container will stop immediately",随后容器立即退出。

再次执行命令创建第二个已停止容器:

docker run ubuntu echo "Another stopped container"

通过 docker ps -a 查看所有容器(包括已停止的):

docker ps -a

输出会显示两个状态为 "Exited" 的容器(如果之前未清理,可能还会看到其他已停止容器):

CONTAINER ID   IMAGE    COMMAND                  CREATED          STATUS                      PORTS     NAMES
<container_id_1>   ubuntu   "echo 'This containe…"   About a minute ago   Exited (0) About a minute ago             <container_name_1>
<container_id_2>   ubuntu   "echo 'Another stopp…"   About a minute ago   Exited (0) About a minute ago             <container_name_2>
...

使用 docker container prune 命令批量删除所有已停止容器:

docker container prune

Docker 会要求确认操作,输入 y 并按回车:

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

终端将列出被删除的容器 ID 和回收的磁盘空间:

Deleted Containers:
<container_id_1>
<container_id_2>
...

Total reclaimed space: ...

最后验证删除结果,再次执行:

docker ps -a

此时输出应只显示运行中的容器(如果有),不再包含已停止的容器。

总结

在本实验中,你学习了使用 docker rm 命令管理 Docker 容器的基础流程。首先创建并运行了一个简单的 hello-world 容器,观察了从创建到退出的完整生命周期。随后练习了通过容器 ID 或名称来删除这个已停止的容器。

在此基础上,你探索了更高级的删除场景:学习了使用 -f 参数强制删除运行中的容器,并理解了这一操作的影响;掌握了通过 -v 参数连带删除关联匿名卷的方法,实现彻底清理;最后还学会了批量删除所有已停止容器的高效技巧,这对维护 Docker 环境整洁非常实用。