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 lipsesteCauza 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 curlEroare: 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/htmlVerifica 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 installSolutia 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 buildEroare: 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 dfSolutia 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:$PATHSolutia 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 buildEroare: 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 dockerSolutia 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.listSolutia 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:20Cauza 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 ArchitectureEroare: 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.jsonSolutia 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 →