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.