You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建Rust项目时/var/lib/docker占用超30GB空间求助

优化Docker构建Rust项目的空间占用方案

1. 采用多阶段构建(核心优化)

多阶段构建能彻底分离构建环境与运行环境,仅保留最终二进制文件,完全丢弃12GB的target目录及构建依赖。修改后的Dockerfile如下:

# 第一阶段:构建阶段
FROM rust:1.72.0 AS builder

WORKDIR /app

# 先复制依赖配置文件,利用Docker缓存避免重复下载依赖
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs
RUN cargo fetch

# 复制真实代码并执行构建
COPY src ./src
RUN apt update && apt install lld clang -y
RUN cargo build --release

# 第二阶段:运行阶段,使用轻量镜像
FROM debian:stable-slim

WORKDIR /app

# 从构建阶段复制最终二进制文件
COPY --from=builder /app/target/release/zero2prod ./

ENTRYPOINT ["./zero2prod"]

2. 优化构建层,减少冗余数据

  • 缓存依赖层:通过先复制Cargo.toml/Cargo.lock并执行cargo fetch,让依赖层独立于代码变更,避免每次修改代码都重新下载依赖。
  • 清理构建缓存:在构建命令后添加清理步骤,压缩构建层体积:
    RUN cargo build --release && \
        rm -rf /usr/local/cargo/registry && \
        rm -rf target/debug target/incremental
    

3. 解决Docker临时目录占用问题

  • 配置全局临时目录:编辑/etc/docker/daemon.json,将临时目录指定到空间充足的分区:
    {
      "tmp-dir": "/data/arch/docker-tmp",
      "storage-driver": "overlay2"
    }
    
    保存后重启Docker服务:systemctl restart docker
  • 构建时限制临时目录:构建命令中使用--tmpfs参数挂载临时文件系统,避免占用磁盘空间:
    docker build --tmpfs /tmp:rw,size=4G -t zero2prod .
    

4. 清理Docker无用资源

定期清理Docker的构建缓存、未使用镜像、容器等,释放空间:

# 强制清理所有未使用的资源(含构建缓存)
docker system prune -af
# 单独清理构建缓存
docker builder prune -af

5. 调整存储驱动(可选)

若之前配置的devicemapper导致空间占用异常,建议改回默认的overlay2(已在上述daemon.json中配置),它对分层存储的空间利用率更高,更适配Rust这类大构建产物的场景。

内容的提问来源于stack exchange,提问作者earth2jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:10:08