Logovi kontejnera i kako da ih ne izgubiš
Gde se čuvaju Docker logovi, kako da ograničiš njihovu veličinu da ne napune disk i šta da uradiš da zapisi prežive ponovno kreiranje kontejnera.
Ažurirano 23. avgust 2026.
Kada servis padne, log je jedini izvor istine. Docker ga podrazumevano upisuje u fajl pored kontejnera i ne ograničava njegovu veličinu: pričljiva aplikacija može da napuni ceo disk za nedelju dana.
Kako čitati
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
Vredi zapamtiti: Docker prikazuje ono što aplikacija upisuje na standardni izlaz i standardnu grešku. Ako upisuje u sopstveni fajl unutar kontejnera, docker logs neće prikazati ništa — log moraš potražiti unutra ili preusmeriti izlaz.
docker compose exec app ls -la /var/log
Ograniči veličinu odmah
Globalno podešavanje za sve kontejnere je /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "20m", "max-file": "3" }
}
sudo systemctl restart docker
Podešavanje važi za kontejnere napravljene posle restarta. Pokrenuti moraju da se ponovo naprave. Za jedan servis isto ide u Compose:
services:
app:
logging:
driver: json-file
options:
max-size: "20m"
max-file: "3"
Rezultat: najviše 60 MB po servisu umesto neograničenog rasta.
Proveri trenutnu veličinu pre nego što te iznenadi:
sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail. Pokrenuti fajl ne možeš skratiti sarm— prostor se ne oslobađa dok Docker drži deskriptor. Ispravan način: ponovo napravi kontejner ilisudo truncate -s 0 <file>.
Sačuvaj logove posle kontejnera
Log fajl se briše zajedno sa kontejnerom. Ako je istorija važna, predaj je sistemskom journalu:
logging:
driver: journald
options:
tag: "myapp"
journalctl -t myapp -n 200 --since today
journalctl -t myapp -p err --since "2 days ago"
journald sam rotira zapise i ograničen je podešavanjem SystemMaxUse u /etc/systemd/journald.conf. Da proveriš koliko prostora zauzima: journalctl --disk-usage.
Za više servisa odjednom zgodnije je sakupiti sve na jedno mesto — na primer, pomoću namenskog kolektor kontejnera koji čuva zapise u fajlove po danima. Ali počni od journald: već je tu i ne košta ništa.
Šta tražiti pri otklanjanju pada
- Poslednjih 200 linija pre pada:
docker logs --tail 200 <container>. - Izlazni kod:
docker inspect -f '{{.State.ExitCode}} {{.State.OOMKilled}}' <container>. Kod 137 itrueuOOMKilledznače da je kernel ubio proces jer je ostao bez memorije — vidi ograničenja resursa. - Sistemski log mašine:
sudo dmesg -T | tail -50pokazaće ubijanja zbog nedostatka memorije i greške na disku.
Česte greške
- Disk se napunio logovima i svi servisi su pali. Ograničavanje veličine je obavezno odmah posle instalacije Dockera.
- Gledanje u log već obrisanog kontejnera. Posle
docker compose downnjega nema. Sakupljaj zapise ujournaldunapred. - Tajne u logu. Aplikacije obožavaju da štampaju connection stringove sa lozinkama. Svako sa pristupom mašini može da pročita log.
- Traženje greške u tekstualnoj konzoli. Uvek je 80×24 i duge linije se seku. Za čitanje logova su SSH ili „Screen” konzola zgodniji.