← Vissza a bloghoz Haladó

10 gyakori Docker hiba és hogyan kerüld el őket

Cannot connect to the daemon, port already in use, óriási image-ek, elveszett adatok, latest tag csapdája — a leggyakoribb Docker hibák és a megoldásuk egy helyen.

A Docker tanulása közben mindenki belefut ugyanabba a néhány hibába és buktatóba — ez teljesen természetes. A jó hír, hogy ezek jól ismertek, és többségük pár perc alatt orvosolható, ha tudod, hol keresd a gyökerét. Ebben a cikkben összeszedtem a tíz leggyakoribb Docker-hibát: mindegyiknél elmondom, mi az oka, és pontosan hogyan javítsd ki. Tedd el könyvjelzőnek — előbb-utóbb mind a tízbe belefutsz.

1. “Cannot connect to the Docker daemon”

A klasszikus kezdő hibaüzenet:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Ok: a Docker démon (Engine) nem fut, vagy a felhasználódnak nincs jogosultsága hozzá. A Docker kliens-szerver architektúrájú: a docker parancs csak egy kliens, ami egy futó démonnal beszélget.

Megoldás: indítsd el a démont. Linuxon:

sudo systemctl start docker

Asztali gépen indítsd el a Docker Desktopot. Ha állandóan sudo-t kell írnod, add magad a docker csoporthoz (majd jelentkezz ki-be):

sudo usermod -aG docker $USER

2. “port is already allocated”

Error: bind: address already in use

Ok: a hoston, amelyre publikálni próbálsz, már fut valami azon a porton — vagy egy másik konténer, vagy egy natív szolgáltatás.

Megoldás: keresd meg, mi foglalja, vagy válassz másik host-portot:

docker ps                       # fut-e már konténer ezen a porton?
docker run -p 8081:80 nginx     # másik host-port (8081) a konténer 80-as portjához

A -p HOST:KONTÉNER formátumban csak a bal oldali, host-portot kell szabaddá tenned.

3. Óriási image-ek

Ha az image-ed több gigabájt, lassú lesz a push, a pull és a deploy is.

Ok: teljes (nem slim/alpine) alapkép, felesleges build-eszközök benne hagyva, és a rétegek rossz kihasználása.

Megoldás: válassz karcsú alapot, és használj multi-stage buildet, hogy a fordítóeszközök ne kerüljenek a végső image-be:

FROM node:20-alpine AS build
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

Az image méretét a docker images paranccsal ellenőrizheted.

4. Adatvesztés volume nélkül

Leállítod és törlöd a PostgreSQL konténered — és eltűnt minden adat. Ismerős?

Ok: a konténer fájlrendszere efemer: amikor a konténer megszűnik, az írható rétege is vele vész.

Megoldás: a tartós adatot named volume-ban tárold:

docker run -d \
  -v pgdata:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=titok \
  postgres:16

💡 Tipp: A named volume (pgdata) túléli a konténer törlését. Akkor is megmarad, ha a konténert eldobod és újat indítasz ugyanazzal a volume-mal — pontosan ezt akarod adatbázisoknál.

5. A latest tag csapdája

A latest kényelmesnek tűnik, de alattomos.

Ok: a latest nem egy verzió, hanem csak egy mozgó mutató. Ma az 1.2-re mutathat, holnap az 1.3-ra — a buildjeid nem reprodukálhatók, és nem tudod biztosan, mi fut élesben.

Megoldás: mindig rögzíts konkrét verziót:

FROM postgres:16.3   # NEM: FROM postgres:latest

A saját image-eidet pedig tageld a git commit SHA-jával vagy semverrel — erről bővebben a Docker a CI/CD-ben cikkben olvashatsz.

6. Root-ként futtatott konténerek

Alapból a konténerben a folyamatok root-ként futnak.

Ok: ha senki nem mond mást, a Docker root-ot használ — egy esetleges betörésnél ez jóval nagyobb mozgásteret ad a támadónak.

Megoldás: hozz létre és válts egy jogosultság nélküli felhasználóra a Dockerfile-ban:

RUN useradd --create-home appuser
USER appuser

7. Titkok beégetése az image-be

Soha ne tegyél jelszót vagy API-kulcsot az image-be.

Ok: ha ENV API_KEY=... vagy egy .env fájl bekerül az image rétegeibe, az ott marad, és bárki kibányászhatja a docker history paranccsal — még akkor is, ha egy későbbi rétegben “törlöd”.

Megoldás: a titkokat futásidőben add át, ne build-időben:

docker run -e API_KEY=titok my-app
docker run --env-file .env my-app

Compose-ban environment vagy secrets használatával — erről a Docker Compose bevezető is segít.

8. Hiányzó .dockerignore

COPY . .

— és vele bemásolod a node_modules-t, a .git-et és a titkaidat is.

Ok: .dockerignore nélkül a teljes könyvtár bekerül a build kontextusba: lassabb build, nagyobb image, és potenciálisan kiszivárgó érzékeny fájlok.

Megoldás: hozz létre egy .dockerignore fájlt:

node_modules
.git
.env
__pycache__
*.log

⚠️ Figyelem: A .dockerignore hiánya nemcsak méret kérdése — biztonsági kockázat is. Egy bemásolt .env vagy .git/config valódi titkokat szivárogtathat ki. Ezt a fájlt mindig hozd létre, mielőtt először buildelsz.

9. Megtelt lemez — nincs takarítás

Egy idő után a no space left on device üzenet fogad.

Ok: a leállított konténerek, a használaton kívüli image-ek, a lógó rétegek és a build cache mind helyet foglalnak, és nem tűnnek el maguktól.

Megoldás: időnként takaríts. Először nézd meg, mi mennyit foglal, majd takaríts célzottan:

docker system df              # mi mennyi helyet foglal
docker system prune           # leállított konténerek + lógó image-ek + hálózatok
docker system prune -a --volumes   # agresszívabb: használaton kívüli minden

A -a --volumes óvatosan kezelendő, mert a nem használt volume-okat is törli.

10. COPY cache-invalidáció rossz sorrendnél

A buildjeid mindig nulláról telepítik a függőségeket, percekig tart minden apró kódváltozás után.

Ok: ha a COPY . . a függőségtelepítés elé kerül, akkor bármely forrásfájl módosítása érvényteleníti a telepítés rétegét is — a Docker mindent újraépít.

Megoldás: előbb csak a függőséglistát másold, telepíts, és csak utána a teljes forrást:

COPY package*.json ./
RUN npm ci          # ez a réteg cache-elhető, amíg a package.json nem változik
COPY . .            # a gyakran változó forrás csak ezt a réteget invalidálja

A rétegek és a cache működéséről részletesen ír a Dockerfile írása lépésről lépésre cikk.

Gyors áttekintő táblázat

HibaEgymondatos megoldás
Daemon nem elérhetőIndítsd a démont / docker csoport
Port foglaltMásik host-port vagy a foglaló leállítása
Óriási imageslim/alpine + multi-stage
AdatvesztésNamed volume
latest tagRögzített verzió / SHA
Root userUSER appuser
Beégetett titokFutásidős -e / --env-file
Nincs .dockerignoreHozd létre
Megtelt lemezdocker system prune
Lassú buildFüggőség a forrás elé

Összefoglalás

A leggyakoribb Docker-hibák szinte mind ugyanabból a néhány elvből vezethetők le: a démon kliens-szerver architektúrája, a konténer efemer fájlrendszere, a rétegek és a build cache működése, valamint az alapvető biztonsági higiénia (nem root, titkok kint, .dockerignore). Ha ezeket az elveket megérted, nemcsak ezt a tíz hibát kerülöd el, hanem a következő tizet is magabiztosan megoldod majd.

Ha még az alapokat építgeted, nézd meg a Kezdő lépések útmutatót és a Mi az a Docker? cikket — egy szilárd alap a legjobb védekezés a hibák ellen. Aztán fogd a saját projekted, és fuss végig ezen a listán: garantáltan találsz benne legalább egy javítanivalót!