Log container dan cara agar tidak hilang
Di mana log Docker disimpan, cara membatasi ukurannya agar tidak memenuhi disk, dan apa yang harus dilakukan agar catatan tetap ada saat container dibuat ulang.
Diperbarui 23 Agustus 2026
Saat sebuah layanan mati, log adalah satu-satunya sumber kebenaran. Secara bawaan Docker menulisnya ke file di samping container dan tidak memberi batas ukurannya: aplikasi yang cerewet bisa memenuhi seluruh disk dalam sepekan.
Cara membaca
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
Perlu diingat: Docker menampilkan apa yang ditulis aplikasi ke standard output dan standard error. Jika aplikasi menulis ke file-nya sendiri di dalam container, docker logs tidak akan menampilkan apa pun — Anda harus mencari log di dalam atau mengalihkan outputnya.
docker compose exec app ls -la /var/log
Batasi ukurannya sekarang juga
Pengaturan global untuk semua container ada di /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "20m", "max-file": "3" }
}
sudo systemctl restart docker
Pengaturan ini berlaku untuk container yang dibuat setelah restart. Container yang sedang berjalan harus dibuat ulang. Untuk satu layanan, hal yang sama dituliskan ke Compose:
services:
app:
logging:
driver: json-file
options:
max-size: "20m"
max-file: "3"
Hasilnya: tidak lebih dari 60 MB per layanan, bukan pertumbuhan tanpa batas.
Periksa ukuran saat ini sebelum membuat Anda terkejut:
sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail. Anda tidak bisa memangkas file yang sedang berjalan denganrm— ruangnya tidak dibebaskan selama Docker memegang deskriptornya. Cara yang benar: buat ulang container atausudo truncate -s 0 <file>.
Buat log bertahan melewati container
File log terhapus bersama container. Jika riwayatnya penting, serahkan ke system journal:
logging:
driver: journald
options:
tag: "myapp"
journalctl -t myapp -n 200 --since today
journalctl -t myapp -p err --since "2 days ago"
journald memutar catatan dengan sendirinya dan dibatasi oleh pengaturan SystemMaxUse di /etc/systemd/journald.conf. Untuk memeriksa berapa banyak ruang yang dipakainya: journalctl --disk-usage.
Untuk beberapa layanan sekaligus, lebih praktis mengumpulkan semuanya di satu tempat — misalnya dengan container collector khusus yang menyimpan catatan dalam file per hari. Tapi mulailah dengan journald: ia sudah ada dan tidak memakan biaya.
Apa yang harus dicari saat men-debug gangguan
- 200 baris terakhir sebelum crash:
docker logs --tail 200 <container>. - Exit code:
docker inspect -f '{{.State.ExitCode}} {{.State.OOMKilled}}' <container>. Kode 137 dantruepadaOOMKilledberarti kernel membunuh proses karena kehabisan memori — lihat batas sumber daya. - Log sistem mesin:
sudo dmesg -T | tail -50akan menunjukkan pembunuhan akibat kehabisan memori dan error disk.
Kesalahan umum
- Disk penuh oleh log dan semua layanan mati. Membatasi ukuran adalah keharusan tepat setelah memasang Docker.
- Melihat log container yang sudah terhapus. Setelah
docker compose downlog itu hilang. Kumpulkan catatan kejournaldsebelumnya. - Rahasia di dalam log. Aplikasi gemar mencetak connection string beserta password. Siapa pun yang punya akses ke mesin bisa membaca log.
- Mencari error di konsol teks. Ukurannya selalu 80×24 dan baris panjang terpotong. Untuk membaca log, SSH atau konsol “Screen” lebih praktis.