清理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

image

image

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 会删除所有未使用的镜像、容器、网络和卷,请确保没有重要的未使用资源。

posted @ 2025-12-04 16:05  Haloiwuhan  阅读(0)  评论(0)    收藏  举报