Amazon Linux 2023上Jenkins构建Docker镜像报磁盘空间不足求助
解决多平台Docker镜像构建"no space left on device"问题的排查方案
1. 检查inode使用情况
空间充足却报空间不足,优先排查inode是否耗尽:
df -i
若某个分区inode使用率达100%,清理该分区下的大量小文件(比如Docker构建残留的临时碎片、Jenkins工作目录的旧构建缓存)。
2. 调整Docker Buildx的临时存储路径
多平台构建依赖Buildx,默认临时文件可能存于/tmp(多为tmpfs,空间有限),可手动指定存储目录到EBS卷:
- 创建自定义Buildx构建器:
docker buildx create --use --name custom_builder --buildkitd-flags "--root /path/to/your/ebs/docker/buildkit"
- 构建时指定临时目录大小:
docker buildx build --tmpfs /tmp:rw,size=10G ...
3. 扩展loop设备配额
Amazon Linux 2023中Docker构建可能用到loop设备,系统默认配额有限。先查看当前使用情况:
losetup -a
若接近上限,增加loop设备数量:
echo "options loop max_loop=64" >> /etc/modprobe.d/loop.conf modprobe loop
4. 清理Jenkins工作目录冗余文件
非容器化Jenkins的工作目录(默认/var/lib/jenkins/workspace)可能堆积大量旧构建临时文件:
- 在Jenkins任务配置中开启"Discard old builds",设置保留的构建数量和天数;
- 手动清理常见缓存目录:
rm -rf /var/lib/jenkins/workspace/*/*/target /var/lib/jenkins/workspace/*/*/.gradle
5. 调整Docker的tmpfs配置
Docker默认给容器挂载的tmpfs空间不足时,修改/etc/docker/daemon.json:
{ "default-ulimits": { "nofile": { "name": "nofile", "hard": 65536, "soft": 65536 } }, "tmpfs": "/tmp:rw,exec,size=20G" }
重启Docker服务生效:
systemctl restart docker
6. 排查SELinux上下文问题
Amazon Linux 2023默认开启SELinux,可能导致Docker无法写入指定的EBS目录。临时关闭测试:
setenforce 0
若问题解决,为Docker根目录设置正确的SELinux上下文:
chcon -Rt svirt_sandbox_file_t /path/to/your/ebs/docker
7. 限制构建并发避免资源冲突
两个任务时而成功时而失败,大概率是并发构建抢占了有限临时资源:
- 在Jenkins全局或任务配置中关闭"Execute concurrent builds if necessary";
- 为每个构建任务分配独立的临时目录,避免资源竞争。
内容的提问来源于stack exchange,提问作者Alex Sitiy
相关产品推荐
相关产品推荐

