Skip to content
VDS · Docker a kontajnery

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íznakPravdepodobná príčinaČo robiť
Neustále RestartingAplikácia padá pri štartedocker compose logs --tail 200, čítaj prvú chybu, nie poslednú
Exit kód 137, OOMKilled: trueNedostatok pamäteZvýš limit alebo nájdi únik, pozri limity zdrojov
Exit kód 1 hneď po štarteChyba v konfigurácii alebo premennýchdocker compose config — skontroluj substitúcie
port is already allocatedPort obsadil iný processudo ss -tulpn | grep :<port>
no space left on deviceDošlo miesto na disku alebo inodydf -h a df -i, pozri miesto na disku
permission denied na súbore vo volumeNesúlad UIDdocker compose exec app id, potom chown alebo PUID/PGID
Aplikácia nevidí databázuIné siete alebo požiadavka na localhostPozri Docker siete
Cannot connect to the Docker daemonSlužba nebeží alebo nemáš oprávneniasudo systemctl status docker, skupina docker
Všetko je pomalé, load je nízkyDisk je úzke hrdloiostat -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 --volumes aj 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.