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
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 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
-
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.
-
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.
-
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.
中文步骤
添加 .dockerignore 文件以排除大型目录,如 node_modules:'**/node_modules/**' 和 '**/.cache/**',以减少构建上下文大小。
在 Docker Desktop 中增加磁盘映像大小:设置 > 资源 > 高级 > 磁盘映像大小(例如从 64GB 增加到 128GB)。然后应用并重启 Docker。
使用多阶段构建,仅复制必要的工件:'COPY --from=builder /app/dist /app',避免将整个 node_modules 复制到最终阶段。
Dead Ends
Common approaches that don't work:
-
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.
-
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.
-
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.