如何在不停止Docker的情况下清理占用空间的Docker卷?
解决方案
1. 清理Docker-in-Docker内部的资源
核心问题是内层Docker运行的容器占用了外层资源,必须先清理内部无用资源:
- 获取TeamCity代理容器ID:
docker ps | grep teamcity-agent - 进入代理容器内部:
docker exec -it <container-id> sh - 在容器内执行内部Docker资源清理:
# 清理所有无用镜像、容器、卷、网络 docker system prune -af --volumes # 单独清理悬空卷(可选) docker volume prune -af # 查看内部磁盘使用情况确认效果 docker system df
2. 排查外层Docker的悬空资源
内部清理后,外层可能残留未关联的悬空资源:
- 列出外层Docker的悬空卷:
docker volume ls -qf dangling=true - 确认无使用的悬空卷可直接删除:
docker volume rm <volume-id> - 查看外层Docker磁盘使用情况:
docker system df
3. 配置TeamCity代理自动清理
避免后续重复占满磁盘:
- 在代理的
buildAgent.properties文件中开启自动清理:teamcity.agent.auto.cleanup=true # 可选:限制保留的构建历史数量 teamcity.agent.max.keep.builds=5 - 在容器内添加定时清理任务(amazon-linux默认支持cronie):
crontab -e # 添加每天凌晨2点清理内部资源的任务 0 2 * * * /usr/bin/docker system prune -af --volumes > /dev/null 2>&1
4. 限制磁盘使用配额
从根源上防止磁盘溢出:
- 启动代理容器时添加磁盘配额限制(需Docker支持overlay2配额,amazon-linux内核通常兼容):
docker run -d --name teamcity-agent \ --storage-opt size=20G \ # 保留原有启动参数... jetbrains/teamcity-agent - 或给/var/lib/docker所在磁盘启用xfs配额:
# 确认磁盘为xfs格式 df -T /var/lib/docker # 修改/etc/fstab挂载参数启用配额,重启后设置目录配额 xfs_quota -x -c 'limit bsoft=20G bhard=25G /var/lib/docker'
内容的提问来源于stack exchange,提问作者Red Bottle
相关产品推荐
相关产品推荐

