docker resource_error ai_generated true

failed to register layer: Error processing tar file(exit status 1): write /app/node_modules/.cache/...: no space left on device

ID: docker/tar-file-too-large-for-layer

Also available as: JSON · Markdown · 中文
85%Fix Rate
87%Confidence
1Evidence
2023-09-05First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Docker Desktop 4.23.0 active — — —
Docker Engine 24.0.7 active — — —
overlay2 storage driver active — — —
Node.js 18.18.0 active — — —
npm 10.2.0 active — — —

Root Cause

The Docker build context or intermediate layer contains a large file (e.g., node_modules cache) that exceeds the available disk space in the Docker storage driver (overlay2).

generic

中文

Docker 构建上下文或中间层包含一个大文件(例如 node_modules 缓存),超出了 Docker 存储驱动(overlay2)中的可用磁盘空间。

Official Documentation

https://docs.docker.com/engine/reference/commandline/builder_prune/

Workarounds

  1. 90% success Add a .dockerignore file to exclude large directories like node_modules: '**/node_modules/**' and '**/.cache/**' to reduce the build context size.
    Add a .dockerignore file to exclude large directories like node_modules: '**/node_modules/**' and '**/.cache/**' to reduce the build context size.
  2. 80% success Increase the disk image size in Docker Desktop: Settings > Resources > Advanced > Disk image size (e.g., from 64GB to 128GB). Then apply and restart Docker.
    Increase the disk image size in Docker Desktop: Settings > Resources > Advanced > Disk image size (e.g., from 64GB to 128GB). Then apply and restart Docker.
  3. 85% success Use multi-stage builds to copy only necessary artifacts: 'COPY --from=builder /app/dist /app' and avoid copying entire node_modules into the final stage.
    Use multi-stage builds to copy only necessary artifacts: 'COPY --from=builder /app/dist /app' and avoid copying entire node_modules into the final stage.

中文步骤

  1. 添加 .dockerignore 文件以排除大型目录,如 node_modules:'**/node_modules/**' 和 '**/.cache/**',以减少构建上下文大小。
  2. 在 Docker Desktop 中增加磁盘映像大小:设置 > 资源 > 高级 > 磁盘映像大小(例如从 64GB 增加到 128GB)。然后应用并重启 Docker。
  3. 使用多阶段构建,仅复制必要的工件:'COPY --from=builder /app/dist /app',避免将整个 node_modules 复制到最终阶段。

Dead Ends

Common approaches that don't work:

  1. Adding more RAM to the Docker VM (Docker Desktop settings) 90% fail

    RAM allocation does not affect disk space in the storage driver; the error is about disk space, not memory. Increasing RAM may help other issues but not this one.

  2. Running 'docker system prune -a' to clean all unused data 50% fail

    While pruning frees space, it does not prevent the build from generating large layers again; the error will recur if the same large file is in the context.

  3. Setting 'DOCKER_BUILDKIT=0' to disable BuildKit 75% fail

    Disabling BuildKit uses the legacy builder which has the same disk space limitation; it may even be more space-intensive due to less efficient caching.