OOM_KILLED cicd resource_error ai_generated true

Killed - The build process was terminated due to out of memory. Try increasing the memory limit.

ID: cicd/docker-build-oom-killed

Also available as: JSON · Markdown · 中文
78%Fix Rate
85%Confidence
1Evidence
2024-01-20First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Docker 24.0.7 active — — —
Docker 25.0.0 active — — —
GitHub Actions runner v2.315.0 active — — —

Root Cause

The Docker build process exceeds the available memory on the runner or host, often due to large multi-stage builds, heavy compilation steps, or insufficient resource allocation in CI.

generic

中文

Docker 构建过程超过了运行器或主机上的可用内存,通常是由于大型多阶段构建、繁重的编译步骤或 CI 中资源分配不足。

Official Documentation

https://docs.docker.com/config/containers/resource_constraints/

Workarounds

  1. 80% success Increase the memory limit in the CI configuration (e.g., GitHub Actions: `options: --memory=8g` in the job definition, or Docker Compose: `mem_limit: 8g`).
    Increase the memory limit in the CI configuration (e.g., GitHub Actions: `options: --memory=8g` in the job definition, or Docker Compose: `mem_limit: 8g`).
  2. 75% success Optimize the Dockerfile by combining RUN commands: `RUN apt-get update && apt-get install -y package1 package2 && apt-get clean` to reduce layer count and intermediate storage.
    Optimize the Dockerfile by combining RUN commands: `RUN apt-get update && apt-get install -y package1 package2 && apt-get clean` to reduce layer count and intermediate storage.
  3. 70% success Use a multi-stage build with a slim base image (e.g., `FROM node:18-alpine` instead of `FROM node:18`) to reduce memory footprint during build.
    Use a multi-stage build with a slim base image (e.g., `FROM node:18-alpine` instead of `FROM node:18`) to reduce memory footprint during build.

中文步骤

  1. 在 CI 配置中增加内存限制(例如 GitHub Actions:在作业定义中添加 `options: --memory=8g`,或 Docker Compose:`mem_limit: 8g`)。
  2. 通过合并 RUN 命令优化 Dockerfile:`RUN apt-get update && apt-get install -y package1 package2 && apt-get clean` 以减少层数和中间存储。
  3. 使用多阶段构建和精简基础镜像(例如 `FROM node:18-alpine` 代替 `FROM node:18`)以减少构建期间的内存占用。

Dead Ends

Common approaches that don't work:

  1. 60% fail

    Adding more RUN layers without combining them; each layer creates additional intermediate containers that increase memory pressure.

  2. 50% fail

    Removing --memory flag entirely thinking it's restrictive; the default limit might be too low, but removing it doesn't increase available memory.

  3. 90% fail

    Ignoring the error and retrying; the build will likely fail again at the same point unless memory is increased or the Dockerfile is optimized.