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
| Simptom | Verovatan uzrok | Šta da radiš |
|---|---|---|
Stalno Restarting | Aplikacija pada pri pokretanju | docker compose logs --tail 200, čitaj prvu grešku, ne poslednju |
Izlazni kod 137, OOMKilled: true | Ponestalo memorije | Povećaj limit ili pronađi curenje, vidi resource limits |
| Izlazni kod 1 odmah nakon pokretanja | Greška u konfiguraciji ili promenljivama | docker compose config — proveri zamene |
port is already allocated | Port zauzima drugi proces | sudo ss -tulpn | grep :<port> |
no space left on device | Ponestalo prostora na disku ili inode čvorova | df -h i df -i, vidi disk space |
permission denied na fajlu u volumenu | Neusklađen UID | docker compose exec app id, zatim chown ili PUID/PGID |
| Aplikacija ne vidi bazu podataka | Različite mreže ili zahtev na localhost | Vidi Docker networks |
Cannot connect to the Docker daemon | Servis ne radi ili nemaš dozvole | sudo systemctl status docker, grupa docker |
| Sve je sporo, opterećenje nisko | Disk je usko grlo | iostat -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--volumesi 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.