Skip to content
VDS · Docker i kontejneri

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 sa rm — prostor se ne oslobađa dok Docker drži deskriptor. Ispravan način: ponovo napravi kontejner ili sudo 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

  1. Poslednjih 200 linija pre pada: docker logs --tail 200 <container>.
  2. Izlazni kod: docker inspect -f '{{.State.ExitCode}} {{.State.OOMKilled}}' <container>. Kod 137 i true u OOMKilled znače da je kernel ubio proces jer je ostao bez memorije — vidi ograničenja resursa.
  3. Sistemski log mašine: sudo dmesg -T | tail -50 pokazać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 down njega nema. Sakupljaj zapise u journald unapred.
  • 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.