mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-02 13:49:31 +00:00
5.2 KiB
5.2 KiB
5.6 删除容器
随着容器的创建和停止,系统中会积累大量的容器。本节将介绍如何删除不再需要的容器,以及如何清理所有停止的容器。
基本用法
使用 docker rm 删除已停止的容器:
$ docker rm 容器名或ID
💡
docker rm是docker container rm的简写,两者等效。
删除选项
| 选项 | 说明 | 示例 |
|---|---|---|
| 无参数 | 删除已停止的容器 | docker rm mycontainer |
-f |
强制删除运行中的容器 | docker rm -f mycontainer |
-v |
同时删除关联的匿名卷 | docker rm -v mycontainer |
删除已停止的容器
运行以下命令:
$ docker rm mycontainer
mycontainer
强制删除运行中的容器
运行以下命令:
## 不加 -f 会报错
$ docker rm running_container
Error: cannot remove running container
## 加 -f 强制删除
$ docker rm -f running_container
running_container
⚠️ 强制删除会向容器发送 SIGKILL 信号,可能导致数据丢失。建议先
docker stop优雅停止。
删除容器及其数据卷
运行以下命令:
## 删除容器时同时删除其匿名卷
$ docker rm -v mycontainer
注意:只删除匿名卷,命名卷不会被删除。
批量删除
删除所有已停止的容器
运行以下命令:
## 方式一:使用 prune 命令(推荐)
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
abc123...
def456...
Total reclaimed space: 150MB
## 方式二:不提示确认
$ docker container prune -f
删除所有容器(包括运行中的)
运行以下命令:
## 先停止所有容器,再删除
$ docker stop $(docker ps -q)
$ docker rm $(docker ps -aq)
## 或者直接强制删除
$ docker rm -f $(docker ps -aq)
按条件删除
运行以下命令:
## 删除所有已退出的容器
$ docker rm $(docker ps -aq -f status=exited)
## 删除名称包含 "test" 的容器
$ docker rm $(docker ps -aq -f name=test)
## 删除 24 小时前创建的容器
$ docker container prune --filter "until=24h"
常用过滤条件
docker ps 的过滤条件可以配合 rm 使用:
| 过滤条件 | 说明 | 示例 |
|---|---|---|
status=exited |
已退出的容器 | -f status=exited |
status=created |
已创建未启动 | -f status=created |
name=xxx |
名称匹配 | -f name=myapp |
ancestor=xxx |
基于某镜像创建 | -f ancestor=nginx |
before=xxx |
在某容器之前创建 | -f before=mycontainer |
since=xxx |
在某容器之后创建 | -f since=mycontainer |
示例
运行以下命令:
## 删除所有基于 nginx 镜像的容器
$ docker rm $(docker ps -aq -f ancestor=nginx)
## 删除所有创建后未启动的容器
$ docker rm $(docker ps -aq -f status=created)
容器与镜像的依赖关系
有容器依赖的镜像无法删除。
## 尝试删除有容器依赖的镜像
$ docker image rm nginx
Error: image is being used by stopped container abc123
## 需要先删除依赖该镜像的容器
$ docker rm abc123
$ docker image rm nginx
清理策略建议
开发环境
运行以下命令:
## 定期清理已停止的容器
$ docker container prune -f
## 一键清理所有未使用资源
$ docker system prune -f
生产环境
运行以下命令:
## 使用 --rm 参数运行临时容器
$ docker run --rm ubuntu echo "Hello"
## 容器退出后自动删除
## 定期清理(设置保留时间)
$ docker container prune --filter "until=168h" # 保留 7 天内的
完整清理脚本
运行以下命令:
#!/bin/bash
## cleanup.sh - Docker 资源清理脚本
echo "清理已停止的容器..."
docker container prune -f
echo "清理未使用的镜像..."
docker image prune -f
echo "清理未使用的数据卷..."
docker volume prune -f
echo "清理未使用的网络..."
docker network prune -f
echo "清理完成!"
docker system df
常见问题
Q: 容器无法删除
运行以下命令:
Error: container is running
解决:先停止容器,或使用 -f 强制删除
$ docker stop mycontainer
$ docker rm mycontainer
## 或
$ docker rm -f mycontainer
Q: 删除后磁盘空间没释放
可能原因:
- 容器的数据卷未删除(使用
-v参数) - 镜像未删除
- 构建缓存未清理
解决:
## 查看空间占用
$ docker system df
## 完整清理
$ docker system prune -a --volumes
本章小结
| 操作 | 命令 |
|---|---|
| 删除已停止容器 | docker rm 容器名 |
| 强制删除运行中容器 | docker rm -f 容器名 |
| 删除容器及匿名卷 | docker rm -v 容器名 |
| 清理所有已停止容器 | docker container prune |
| 删除所有容器 | docker rm -f $(docker ps -aq) |