Logy kontajnerov a ako o ne neprísť
Kde sú uložené Docker logy, ako obmedziť ich veľkosť, aby nezaplnili disk, a čo urobiť, aby záznamy prežili znovuvytvorenie kontajnera.
Aktualizované 23. augusta 2026
Keď služba spadne, log je jediným zdrojom pravdy. Docker ho štandardne zapisuje do súboru vedľa kontajnera a nekladie na jeho veľkosť žiadny strop: ukecaná aplikácia dokáže zaplniť celý disk za týždeň.
Ako čítať
docker logs -f --tail 100 <container>
docker compose logs -f app
docker compose logs --since 30m --timestamps app
docker logs <container> 2>&1 | grep -i error | tail -50
Stojí za zapamätanie: Docker zobrazuje to, čo aplikácia zapisuje na štandardný výstup a štandardný chybový výstup. Ak zapisuje do vlastného súboru vnútri kontajnera, docker logs neukáže nič — musíš hľadať log vnútri alebo presmerovať výstup.
docker compose exec app ls -la /var/log
Obmedz veľkosť hneď teraz
Globálne nastavenie pre všetky kontajnery je /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "20m", "max-file": "3" }
}
sudo systemctl restart docker
Nastavenie platí pre kontajnery vytvorené po reštarte. Bežiace treba znovu vytvoriť. Pre jednu službu to isté patrí do Compose:
services:
app:
logging:
driver: json-file
options:
max-size: "20m"
max-file: "3"
Výsledok: namiesto neobmedzeného rastu maximálne 60 MB na službu.
Skontroluj aktuálnu veľkosť, kým ťa neprekvapí:
sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail. Bežiaci súbor nemôžeš orezať pomocourm— kým Docker drží deskriptor, miesto sa neuvoľní. Správny postup: znovu vytvor kontajner alebosudo truncate -s 0 <file>.
Nechaj logy prežiť kontajner
Súbor logu sa zmaže spolu s kontajnerom. Ak na histórii záleží, odovzdaj ju systémovému journalu:
logging:
driver: journald
options:
tag: "myapp"
journalctl -t myapp -n 200 --since today
journalctl -t myapp -p err --since "2 days ago"
journald rotuje záznamy sám a je ohraničený nastavením SystemMaxUse v /etc/systemd/journald.conf. Koľko miesta zaberá, zistíš pomocou journalctl --disk-usage.
Pri viacerých službách naraz je pohodlnejšie zbierať všetko na jednom mieste — napríklad pomocou vyhradeného kontajnera zberača, ktorý ukladá záznamy do súborov po dňoch. Ale začni s journald: už tam je a nič nestojí.
Čo hľadať pri ladení výpadku
- Posledných 200 riadkov pred pádom:
docker logs --tail 200 <container>. - Návratový kód:
docker inspect -f '{{.State.ExitCode}} {{.State.OOMKilled}}' <container>. Kód 137 atruevOOMKilledznamenajú, že jadro proces zabilo, pretože mu došla pamäť — pozri limity zdrojov. - Systémový log stroja:
sudo dmesg -T | tail -50ukáže zabitia z dôvodu nedostatku pamäte a chyby disku.
Časté chyby
- Disk sa zaplnil logmi a všetky služby spadli. Obmedzenie veľkosti je nutnosť hneď po inštalácii Dockeru.
- Pozeranie do logu už zmazaného kontajnera. Po
docker compose downje preč. Zbieraj záznamy dojournaldvopred. - Tajomstvá v logu. Aplikácie rady vypisujú pripojovacie reťazce s heslami. Ktokoľvek s prístupom k stroju si log prečíta.
- Hľadanie chyby v textovej konzole. Má vždy 80×24 a dlhé riadky sa odrežú. Na čítanie logov je pohodlnejší SSH alebo konzola „Screen“.