网站首页 > 教程文章 正文
技术背景
在使用Docker进行开发和部署的过程中,随着时间的推移,系统中会积累大量不再使用的旧容器。这些旧容器不仅占用磁盘空间,还可能导致管理上的混乱。因此,定期清理旧容器是保持系统整洁和高效的重要操作。
实现步骤
1. 使用 docker container prune移除所有停止的容器
从Docker 1.13.x版本开始,可以使用 docker container prune 命令移除所有停止的容器:
docker container prune
执行该命令后,Docker会提示确认操作,输入 y 并回车即可完成移除。
2. 使用 docker system prune清理所有未使用的资源
docker system prune 命令可以清理所有未使用的容器、网络、镜像(包括悬空和未引用的),并可选择清理卷:
docker system prune
若要同时移除所有未使用的镜像(包括有容器关联的),可以加上 -a 选项:
docker system prune -a
执行该命令时,同样会有确认提示,输入 y 并回车。
3. 过滤移除特定条件的容器
- 移除数周前停止的容器:
docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
- 移除在特定容器之前创建的容器:
docker rm $(docker ps -f before=<container-ID> -q)
- 移除在特定容器之后创建的容器:
docker rm $(docker ps -f since=<container-ID> -q)
4. 按数量移除旧容器
移除最旧的5个容器:
docker rm `docker ps -aq | tail -n 5`
5. 按时间范围移除容器
移除超过24小时的容器:
sudo docker container prune --filter "until=24h"
核心代码
以下是一个清理停止容器和悬空镜像的脚本示例:
#!/bin/bash
# Cleanup docker files: stopped containers and dangling images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.
stopped_containers() {
docker ps -q -f status=exited
}
dangling_images() {
docker images -q -f "dangling=true"
}
# Dry-run.
if [ "$1" = "-n" ]; then
echo "==> Would stop containers:"
stopped_containers
echo "==> And images:"
dangling_images
exit
fi
# Remove stopped containers
if [ -n "$(stopped_containers)" ]; then
docker rm $(stopped_containers)
else
echo "No containers to remove."
fi
# Remove dangling images
if [ -n "$(dangling_images)" ]; then
docker rmi $(dangling_images)
else
echo "No images to remove."
fi
最佳实践
- 定期清理:设置定时任务,定期执行清理命令,如使用 cron 任务每天执行一次 docker system prune -a。
- 使用标签管理:在创建容器和镜像时,使用有意义的标签,方便后续筛选和管理。
- 谨慎使用 -a 选项:docker system prune -a 会移除所有未使用的镜像,包括有容器关联的,使用前需确认不会误删重要镜像。
常见问题
1. 移除容器时提示“Error: Impossible to remove a running container, please stop it first”
这是因为要移除的容器正在运行,需要先停止容器再进行移除操作。可以使用以下命令停止所有运行的容器:
docker stop $(docker ps -q)
然后再执行移除命令。
2. 命令在Windows系统中无法正常工作
部分命令在Windows系统中可能需要调整语法,例如使用 FOR 循环来移除所有容器:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
在PowerShell中可以使用:
docker rm @(docker ps -aq)
3. 移除镜像时提示有容器依赖
需要先移除依赖该镜像的容器,再移除镜像。可以使用 docker ps -a 查看依赖的容器,并使用 docker rm 移除这些容器,然后再移除镜像。
- 上一篇: Docker命令最全详解(39个最常用命令)
- 下一篇: Docker常用命令大全
猜你喜欢
- 2025-05-21 10张图带你深入理解Docker容器和镜像
- 2025-05-21 Docker实战(二):快速学会镜像的基本使用
- 2025-05-21 那些被"删除"却仍占用空间的文件
- 2025-05-21 Docker镜像与容器的区别
- 2025-05-21 Docker基础知识之操作镜像
- 2025-05-21 带你找回那些被 Docker 吃掉的磁盘空间
- 2025-05-21 Docker工具的使用方法进阶-关于镜像
- 2025-05-21 无论是开发还是运维,都必须掌握的Docker常用命令
- 2025-05-21 Windows 上 Docker 镜像与容器更新全攻略
- 2025-05-21 docker常用命令大全,看这一篇就够了
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)