DevSecOps

Erori de Build Docker: Probleme Frecvente si Cum sa le Rezolvi

Nicu Constantin
--7 min lectura
#docker#containers#troubleshooting#devops#dockerfile

Build-urile Docker pot esua in moduri misterioase. Acest ghid acopera cele mai frecvente erori de build si ofera solutii testate.

Eroare: Failed to Compute Cache Key

Simptom:

failed to compute cache key: failed to calculate checksum of ref:
"/path/to/file" not found

COPY failed: file not found in build context: requirements.txt

Cauza 1: Fisierul nu este in build context

# ❌ Fisier in afara contextului
COPY ../config/app.conf /app/
 
# ✅ Muta fisierul in build context sau ajusteaza contextul
docker build -f docker/Dockerfile -t myapp ..

Cauza 2: .dockerignore exclude fisierele necesare

# Verifica .dockerignore
cat .dockerignore
 
# Greseala frecventa - ignori totul si uiti exceptiile
# .dockerignore:
*
!src/
!package.json
!requirements.txt  # Adauga asta daca lipseste

Cauza 3: Sensibilitate la majuscule (Linux vs macOS)

# ❌ Majuscule gresite (merge pe macOS, esueaza pe Linux)
COPY Requirements.txt /app/
 
# ✅ Potrivire exacta de majuscule
COPY requirements.txt /app/

Debug - listeaza build context:

# Vezi ce este de fapt in context
docker build -t test . 2>&1 | head -20
 
# Sau foloseste buildx debug
BUILDKIT_PROGRESS=plain docker build -t test .

Eroare: apt-get Install Esuat

Simptom:

E: Unable to locate package some-package
E: Package 'python3' has no installation candidate
Reading package lists... Error!

Solutia 1 - Actualizeaza inainte de instalare:

# ❌ Lipseste update
RUN apt-get install -y curl
 
# ✅ Intotdeauna actualizeaza mai intai
RUN apt-get update && apt-get install -y \
    curl \
    wget \
    && rm -rf /var/lib/apt/lists/*

Solutia 2 - Fixeaza versiunile pachetelor:

# Pentru build-uri reproductibile
RUN apt-get update && apt-get install -y \
    curl=7.88.1-10+deb12u1 \
    && rm -rf /var/lib/apt/lists/*
 
# Sau foloseste --no-install-recommends
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    && rm -rf /var/lib/apt/lists/*

Solutia 3 - Foloseste o imagine de baza diferita:

# Daca pachetul nu este disponibil in slim
FROM python:3.12  # Imagine completa in loc de python:3.12-slim
 
# Sau foloseste Alpine
FROM python:3.12-alpine
RUN apk add --no-cache curl

Eroare: COPY --from Stage Not Found

Simptom:

failed to solve: failed to compute cache key: "builder" not found
invalid from flag value builder: pull access denied

Cauza: Nepotrivire de nume la stage

# ❌ Nume gresit de stage
FROM node:20 AS build
RUN npm install && npm run build
 
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html  # 'builder' nu exista!
 
# ✅ Nume corect de stage
FROM node:20 AS builder
RUN npm install && npm run build
 
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

Verifica daca stage-ul exista:

# Debug build-uri multi-stage
docker build --target builder -t test-builder .
docker run --rm test-builder ls -la /app/

Eroare: Permission Denied in Timpul Build-ului

Simptom:

permission denied while trying to connect to Docker daemon
COPY failed: permission denied
npm ERR! Error: EACCES: permission denied

Solutia 1 - Corecteaza permisiunile fisierelor inainte de COPY:

# Pe host inainte de build
chmod +x scripts/entrypoint.sh
# In Dockerfile
COPY --chmod=755 scripts/entrypoint.sh /app/

Solutia 2 - Ruleaza ca utilizatorul corect:

# Creeaza utilizator non-root
RUN useradd -m -u 1000 appuser
 
# Seteaza ownership
COPY --chown=appuser:appuser . /app/
 
# Schimba la utilizator
USER appuser
 
# npm/pip vor functiona in spatiul utilizatorului
RUN npm install

Solutia 3 - Corecteaza permisiunile npm:

FROM node:20
 
WORKDIR /app
 
# Creeaza node_modules cu permisiuni corecte
RUN mkdir -p /app/node_modules && chown -R node:node /app
 
USER node
 
COPY --chown=node:node package*.json ./
RUN npm ci
 
COPY --chown=node:node . .
RUN npm run build

Eroare: Memorie Insuficienta / Spatiu pe Disc

Simptom:

no space left on device
Error response from daemon: write /var/lib/docker/tmp/...: no space left
failed to register layer: Error processing tar file: write: no space left

Solutia 1 - Curata sistemul Docker:

# Sterge toate datele nefolosite
docker system prune -a
 
# Curatare mai agresiva
docker system prune -a --volumes
 
# Verifica utilizarea discului
docker system df

Solutia 2 - Redu dimensiunea imaginii:

# ❌ Imagine mare
FROM python:3.12
COPY . /app
RUN pip install -r requirements.txt
 
# ✅ Multi-stage + baza slim
FROM python:3.12 AS builder
COPY requirements.txt .
RUN pip install --user -r requirements.txt
 
FROM python:3.12-slim
COPY --from=builder /root/.local /root/.local
COPY . /app
ENV PATH=/root/.local/bin:$PATH

Solutia 3 - Optimizeaza cache-ul de layere:

# ❌ Invalideaza cache-ul la orice modificare de cod
COPY . /app
RUN npm install
 
# ✅ Dependentele sunt cached separat
COPY package*.json ./
RUN npm ci
COPY . /app
RUN npm run build

Eroare: Timeout de Retea in Timpul Build-ului

Simptom:

Get "https://registry-1.docker.io/v2/": net/http: request canceled
failed to fetch https://deb.debian.org/...: Connection timed out
pip install timeout

Solutia 1 - Configureaza DNS:

# Configurare Docker daemon (/etc/docker/daemon.json)
{
  "dns": ["8.8.8.8", "8.8.4.4"]
}
 
# Restarteaza Docker
sudo systemctl restart docker

Solutia 2 - Foloseste mirror-uri:

# Foloseste mirror npm regional
RUN npm config set registry https://registry.npmmirror.com && npm install
 
# Foloseste mirror pip
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
 
# Foloseste mirror apt
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

Solutia 3 - Build cu timeout mai mare:

# Creste timeout-ul pentru conexiuni lente
DOCKER_BUILDKIT=1 docker build \
  --network=host \
  --build-arg PIP_DEFAULT_TIMEOUT=100 \
  -t myapp .

Eroare: Erori de Sintaxa BuildKit

Simptom:

failed to solve with frontend dockerfile.v0
failed to create LLB definition: dockerfile parse error

Cauza 1: Directiva de sintaxa gresita:

# ❌ Directiva de sintaxa trebuie sa fie pe prima linie
FROM node:20
# syntax=docker/dockerfile:1
 
# ✅ Pozitie corecta
# syntax=docker/dockerfile:1
FROM node:20

Cauza 2: Functionalitati BuildKit fara activare:

# Functionalitati care necesita BuildKit
RUN --mount=type=cache,target=/root/.cache pip install -r requirements.txt
RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret
# Activeaza BuildKit
export DOCKER_BUILDKIT=1
docker build -t myapp .
 
# Sau foloseste docker buildx
docker buildx build -t myapp .

Eroare: Executable Format Error

Simptom:

exec format error
standard_init_linux.go:228: exec user process caused "exec format error"

Cauza: Nepotrivire de arhitectura (ARM vs x86)

# Build pentru arhitectura diferita
# Pe Mac M1/M2, build pentru x86:
docker build --platform linux/amd64 -t myapp .
 
# Build multi-arhitectura
docker buildx build --platform linux/amd64,linux/arm64 -t myapp .

Verifica arhitectura imaginii:

docker inspect myapp | grep Architecture

Eroare: Pull Imagine de Baza Esuat

Simptom:

pull access denied for myregistry.com/base-image
Error response from daemon: manifest for image:tag not found

Solutia 1 - Docker login:

# Autentificare la registru
docker login myregistry.com
 
# Sau foloseste credential helper
echo '{"credsStore": "desktop"}' > ~/.docker/config.json

Solutia 2 - Verifica daca imaginea exista:

# Verifica imaginea si tag-ul
docker manifest inspect myregistry.com/base-image:tag
 
# Listeaza tag-urile disponibile
curl -s https://registry.hub.docker.com/v2/repositories/library/python/tags/ | jq '.results[].name'

Bune Practici Dockerfile

# syntax=docker/dockerfile:1
FROM python:3.12-slim AS builder
 
# Instaleaza dependentele de build
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    && rm -rf /var/lib/apt/lists/*
 
WORKDIR /app
 
# Instaleaza dependentele Python
COPY requirements.txt .
RUN --mount=type=cache,target=/root/.cache \
    pip install --user -r requirements.txt
 
# Etapa de productie
FROM python:3.12-slim
 
# Creeaza utilizator non-root
RUN useradd -m -u 1000 appuser
 
WORKDIR /app
 
# Copiaza dependentele din builder
COPY --from=builder /root/.local /home/appuser/.local
 
# Copiaza aplicatia
COPY --chown=appuser:appuser . .
 
USER appuser
ENV PATH=/home/appuser/.local/bin:$PATH
 
EXPOSE 8000
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0"]

Referinta Rapida: Comenzi de Debug Build

| Problema | Comanda | |----------|---------| | Verificare build context | docker build -t test . 2>&1 \| head | | Build detaliat | BUILDKIT_PROGRESS=plain docker build . | | Fara cache | docker build --no-cache -t app . | | Inspectie layere | docker history myimage | | Verificare disc | docker system df | | Curata totul | docker system prune -a --volumes |

Optimizare Pipeline Docker?

Build-urile Docker eficiente sunt esentiale pentru performanta CI/CD. Echipa noastra ofera:

  • Optimizarea timpului de build (build-uri de 10x mai rapide)
  • Strategii de reducere a dimensiunii imaginilor
  • Pipeline-uri de build multi-arhitectura
  • Securizarea registrelor de imagini

Obtine ajutor pentru containerizare


Sistemul tau AI e conform cu EU AI Act? Evaluare gratuita de risc - afla in 2 minute →

Ai nevoie de ajutor cu conformitatea EU AI Act sau securitatea AI?

Programeaza o consultatie gratuita de 30 de minute. Fara obligatii.

Programeaza un Apel

Weekly AI Security & Automation Digest

Get the latest on AI Security, workflow automation, secure integrations, and custom platform development delivered weekly.

No spam. Unsubscribe anytime.