Skip to content
VDS · Docker i kontejneri

Docker: rešavanje čestih problema

Kontejner se stalno restartuje, port je zauzet, nema mesta na disku, „permission denied“, usluga ne vidi svog suseda — tabela simptoma i procedura za rešavanje problema.

Ažurirano 23. avgust 2026.

Skoro svi problemi sa kontejnerima svode se na desetak uobičajenih. Dijagnostika uvek počinje istim trima komandama.

Prve tri komande

docker compose ps
docker compose logs --tail 100 <service>
docker inspect -f '{{.State.Status}} {{.State.ExitCode}} {{.State.OOMKilled}} {{.State.Error}}' <container>

Status, poslednje linije loga i izlazni kod odgovaraju na većinu pitanja. Nakon toga kreni od simptoma.

Tabela simptoma

SimptomVerovatan uzrokŠta da radiš
Stalno RestartingAplikacija pada pri pokretanjudocker compose logs --tail 200, čitaj prvu grešku, ne poslednju
Izlazni kod 137, OOMKilled: truePonestalo memorijePovećaj limit ili pronađi curenje, vidi resource limits
Izlazni kod 1 odmah nakon pokretanjaGreška u konfiguraciji ili promenljivamadocker compose config — proveri zamene
port is already allocatedPort zauzima drugi processudo ss -tulpn | grep :<port>
no space left on devicePonestalo prostora na disku ili inode čvorovadf -h i df -i, vidi disk space
permission denied na fajlu u volumenuNeusklađen UIDdocker compose exec app id, zatim chown ili PUID/PGID
Aplikacija ne vidi bazu podatakaRazličite mreže ili zahtev na localhostVidi Docker networks
Cannot connect to the Docker daemonServis ne radi ili nemaš dozvolesudo systemctl status docker, grupa docker
Sve je sporo, opterećenje niskoDisk je usko grloiostat -x 2, vidi disk speed

Kontejner pada, a log je prazan

To se dešava kada proces umre pre nego što uspe da išta ispiše. Pokreni image ručno sa shell-om umesto glavne komande:

docker run --rm -it --entrypoint sh <image>

Unutra ručno pokreni komandu za start — greška će se pojaviti na ekranu. Dok si tu, proveri da li su konfiguracioni fajlovi na mestu:

docker compose run --rm app cat /app/config.yaml

Izmene se ne primenjuju

Klasika: izmeniš fajl, restartuješ, i ništa se ne promeni.

docker compose config          # does Compose see your changes
docker compose up -d --force-recreate app
docker compose exec app cat /etc/app/config.yaml

Obično postoje dva uzroka: fajl je montiran negde drugde nego što misliš, ili kontejner vidi kopiju koja je ušla u image tokom build-a.

Ne rešavaj problem sa docker system prune -a. Ona uklanja neiskorišćene image-e, mreže i build keš, a sa flagom --volumes i volumene sa podacima. Volumen postaje „neiskorišćen” onog trenutka kada se njegov kontejner zaustavi. Prvo utvrdi uzrok, pa onda čisti.

Kada ipak čistiti

docker system df
docker image prune
docker builder prune
docker container prune

docker system df će pokazati šta tačno zauzima prostor: image-i, build keš, volumeni ili logovi kontejnera. Obično je kriv build keš — njegovo uklanjanje je bezbedno.

Ako mašina ne reaguje

SSH se ne povezuje, sajt se ne otvara — obično je kontejner pojeo memoriju i sistem je prešao u swap. Prijavi se preko konzole u panelu mašine. Za htop i btop potreban je režim „Screen”: veličina prozora se ne prenosi preko tekstualne linije, pa je uvek 80×24.

free -h
sudo dmesg -T | tail -40
sudo systemctl restart docker

Ako se sistem uopšte ne podiže, prebaci režim podizanja na SystemRescue recovery disk u kartici „Access”: mašina će se restartovati u njega, root prijava bez lozinke, a disk će biti vidljiv kao /dev/sda. Odatle možeš da montiraš particiju i izvučeš podatke.

Šta proveriti pre, a ne posle

  • Postavljeni su limiti veličine logova — vidi container logs.
  • Limiti memorije su postavljeni za sve servise.
  • Verzije image-a su fiksirane, a stari image nije obrisan — vidi container updates.
  • Kopija podataka postoji i proverena je — vidi restore drill.