清理Docker无用资源
这是一个磁盘空间不足的错误。Docker构建时需要在/var/lib/docker目录下存储镜像层,而你的磁盘空间已经用完。
解决方案:
1. 检查磁盘空间
# 查看磁盘使用情况
df -h
# 查看Docker目录大小
du -sh /var/lib/docker/*
# 或者使用ncdu工具(需要安装)
ncdu /var/lib/docker
2. 清理Docker无用资源
# 停止所有容器
docker stop $(docker ps -aq)
# 清理无用镜像、容器、网络、卷
docker system prune -a -f
# 清理所有未使用的资源
docker system prune --volumes -f
# 或者更激进的清理
docker system prune -a --volumes


3. 删除特定大文件
# 查看最大的目录
du -h /var/lib/docker | sort -rh | head -20
# 清理构建缓存
docker builder prune -a -f
# 清理特定镜像
docker images --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}" | sort -k 2 -h -r
docker rmi <image_id>
4. 扩大Docker存储空间(如果有可用空间)
# 检查是否有挂载的额外磁盘
lsblk
# 如果有额外磁盘,可以迁移Docker数据
# 停止Docker服务
systemctl stop docker
# 创建新目录
mkdir -p /data/docker
# 复制现有数据
rsync -avx /var/lib/docker/ /data/docker/
# 修改Docker配置文件
vim /etc/docker/daemon.json
添加以下内容:
{
"data-root": "/data/docker"
}
5. 临时解决方案(为当前构建腾出空间)
# 清理日志文件
journalctl --vacuum-time=3d
rm -rf /var/log/*.gz /var/log/*.old /var/log/journal/*
# 清理apt缓存
apt-get clean
apt-get autoclean
# 清理yum缓存(如果是CentOS/RHEL)
yum clean all
# 查找大文件
find / -type f -size +100M 2>/dev/null | xargs ls -lh
6. 对于你的具体情况,可以尝试:
# 1. 清理构建上下文中的.git目录(减少COPY的大小)
# 在Dockerfile所在的目录创建.dockerignore文件
echo ".git" >> .dockerignore
echo ".idea" >> .dockerignore
echo "__pycache__" >> .dockerignore
echo "*.pyc" >> .dockerignore
echo "*.log" >> .dockerignore
# 2. 减少构建层
# 将多个RUN命令合并
7. 优化你的Dockerfile
# 使用更小的基础镜像
FROM python:3.12-slim
# 安装最小化依赖
RUN apt-get update && apt-get install -y \
mysql-client \
&& rm -rf /var/lib/apt/lists/*
# 先复制requirements.txt并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 然后复制应用代码
COPY . .
8. 如果还是空间不足,可以:
# 添加临时交换空间
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 永久添加(如果需要)
echo '/swapfile none swap sw 0 0' >> /etc/fstab
9. 最后,重新构建时使用
# 清理后重新构建
docker build --no-cache .
# 或者指定构建上下文只包含必要文件
tar -czh . | docker build -
最快速的解决方案:
# 执行这个清理命令(会删除所有未使用的Docker资源)
docker system prune -a -f --volumes
# 然后删除一些大日志文件
find /var/log -type f -name "*.log" -size +100M -exec truncate -s 0 {} \;
# 再次尝试构建
docker build .
注意:docker system prune -a 会删除所有未使用的镜像、容器、网络和卷,请确保没有重要的未使用资源。

浙公网安备 33010602011771号