docker rm 是什么
docker rm 删除容器,连带删除它的可写层与元数据,操作不可恢复。默认只能删除已停止的容器,加强制选项可以连运行中的一起处理。删除前要确认清楚两件事:日志是否需要留存,没挂在卷或宿主目录里的数据是否还需要。
基本信息
| 语法 | docker rm [选项] CONTAINER... |
|---|---|
| 强制删除 | -f 停止并删除运行中的容器 |
| 关联清理 | -v 一并删除该容器的匿名数据卷 |
| 批量清理 | docker container prune 删除全部已停止容器 |
| 前提 | 容器被覆盖层或子进程占用时会提示占用而拒绝删除 |
典型使用场景
- 一次性任务收尾:跑完的临时容器及时删除,避免列表里堆满停止的实例
- 重建容器以修改参数:端口、挂载、变量改动后必须删掉重建
- 释放磁盘:可写层占满空间的容器清理掉,回收最快
- 批量整理开发机:按状态筛出已停止的容器统一清理
- 环境回收:项目下线时把相关容器与匿名卷一并清理干净
常用示例
常用示例
docker rm web # 删除已停止的容器
docker rm -f web # 运行中也一起删除
docker rm -v $(docker ps -aq --filter status=exited) # 连匿名卷一起清理
docker ps -a --filter status=exited --format '{{.Names}}' # 删之前先列出目标
docker container prune # 交互确认后批量清理删除方式对照
| 方式 | 作用范围 | 风险提示 |
|---|---|---|
| 按名称删除 | 指定容器 | 名称写错会删到别的服务,先列出目标核对 |
| 按标识删除 | 指定标识对应的容器 | 标识前缀有歧义时可能命中多个 |
| 强制删除 | 运行中容器也删 | 相当于强杀,有状态服务要先在应用层停干净 |
| 批量清理 | 全部已停止容器 | 会连同排障现场一起清掉,事故期间慎用 |
| 带卷删除 | 额外清理匿名卷 | 匿名卷里可能是数据目录,删除后不可恢复 |
删之前的三项检查
- 日志是否已留存:容器删除后标准输出的历史一并消失,需要复盘就先导出
- 数据是否已挂出:可写层里的东西没有备份手段,确认重要数据在卷或宿主目录里
- 命名卷是否需要保留:关联清理只处理匿名卷,命名卷还留在卷列表里,容易造成误会
- 是否有监控或编排在管理它:编排会自动拉起,手工删除可能造成状态漂移
- 删除记录是否留痕:生产环境保留操作记录,方便追溯谁在什么时候清理了哪个实例
容器可写层里没有挂出来的数据会随删除一起消失,且没有回收手段。以数据目录为写入目标的容器,删除前一定要确认该目录已经挂在卷或宿主目录上。
关联清理选项只处理匿名卷。命名卷在删除容器后依然存在,需要单独按名清理;误以为已经清空、磁盘却没有释放,多半就是这个原因。
删除与重建的配合
- 改端口、改挂载、改环境变量都要删掉重建,这是容器不可变特性的直接后果
- 重建前把启动命令保存成脚本或编排文件,避免每次靠历史记录拼命令
- 重建期间服务会中断,生产环境用新起一份再切换的方式减少停机
- 重建后确认挂载与端口与预期一致,再确认服务真的可以访问
- 把重建纳入变更流程,删掉旧容器前确认监控与备份都已就位