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.