Docker: riešenie bežných problémov
Kontajner sa stále reštartuje, port je obsadený, no space left, „permission denied“, služba nevidí suseda — tabuľka príznakov a postup riešenia.
Aktualizované 23. augusta 2026
Takmer všetky problémy s kontajnermi sa dajú zhrnúť do tucta bežných prípadov. Diagnostika vždy začína tými istými tromi príkazmi.
Prvé tri príkazy
docker compose ps
docker compose logs --tail 100 <service>
docker inspect -f '{{.State.Status}} {{.State.ExitCode}} {{.State.OOMKilled}} {{.State.Error}}' <container>
Stav, posledné riadky logu a exit kód odpovedia na väčšinu otázok. Potom postupuj podľa príznaku.
Tabuľka príznakov
| Príznak | Pravdepodobná príčina | Čo robiť |
|---|---|---|
Neustále Restarting | Aplikácia padá pri štarte | docker compose logs --tail 200, čítaj prvú chybu, nie poslednú |
Exit kód 137, OOMKilled: true | Nedostatok pamäte | Zvýš limit alebo nájdi únik, pozri limity zdrojov |
| Exit kód 1 hneď po štarte | Chyba v konfigurácii alebo premenných | docker compose config — skontroluj substitúcie |
port is already allocated | Port obsadil iný proces | sudo ss -tulpn | grep :<port> |
no space left on device | Došlo miesto na disku alebo inody | df -h a df -i, pozri miesto na disku |
permission denied na súbore vo volume | Nesúlad UID | docker compose exec app id, potom chown alebo PUID/PGID |
| Aplikácia nevidí databázu | Iné siete alebo požiadavka na localhost | Pozri Docker siete |
Cannot connect to the Docker daemon | Služba nebeží alebo nemáš oprávnenia | sudo systemctl status docker, skupina docker |
| Všetko je pomalé, load je nízky | Disk je úzke hrdlo | iostat -x 2, pozri rýchlosť disku |
Kontajner padá, ale log je prázdny
Stáva sa to, keď proces zomrie skôr, než stihne čokoľvek vypísať. Spusť image manuálne so shellom namiesto hlavného príkazu:
docker run --rm -it --entrypoint sh <image>
Vnútri spusť štartovací príkaz ručne — chyba sa objaví na obrazovke. Kým si tam, skontroluj, či sú konfiguračné súbory na mieste:
docker compose run --rm app cat /app/config.yaml
Zmeny sa neprejavia
Klasika: upravíš súbor, reštartuješ a nič sa nezmení.
docker compose config # does Compose see your changes
docker compose up -d --force-recreate app
docker compose exec app cat /etc/app/config.yaml
Zvyčajne sú na to dve príčiny: súbor je namountovaný inde, než si myslíš, alebo kontajner vidí kópiu, ktorá sa dostala do image pri builde.
Neopravuj problém cez
docker system prune -a. Odstráni nepoužité image, siete a build cache a s prepínačom--volumesaj volumes s dátami. Volume sa stane „nepoužitým“ v momente, keď sa jeho kontajner zastaví. Najprv zisti príčinu, potom upratuj.
Kedy po tom všetkom upratať
docker system df
docker image prune
docker builder prune
docker container prune
docker system df ukáže, čo presne zaberá miesto: image, build cache, volumes alebo logy kontajnerov. Zvyčajne je na vine build cache — jej odstránenie je bezpečné.
Ak stroj nereaguje
SSH sa nepripojí, stránka sa neotvorí — zvyčajne kontajner zožral pamäť a systém prešiel do swapu. Prihlás sa cez konzolu v paneli stroja. Pre htop a btop potrebuješ režim „Screen“: veľkosť okna sa cez textový riadok neprenáša, takže je vždy 80×24.
free -h
sudo dmesg -T | tail -40
sudo systemctl restart docker
Ak systém vôbec nenabootuje, prepni režim štartu na záchranný disk SystemRescue v karte „Prístup“: stroj sa doňho reštartuje, root login bez hesla a disk bude viditeľný ako /dev/sda. Odtiaľ môžeš pripojiť partíciu a zachrániť dáta.
Čo skontrolovať predtým, nie potom
- Limity veľkosti logov sú nastavené — pozri logy kontajnerov.
- Limity pamäte sú nastavené pre všetky služby.
- Verzie image sú pripnuté a starý image nebol zmazaný — pozri aktualizácie kontajnerov.
- Kópia dát existuje a je overená — pozri test obnovy.