🧠 Kenapa Perlu Limitasi Log
Secara default, Docker menyimpan log container dalam format JSON file di:
/var/lib/docker/containers/<container_id>/<container_id>-json.log
File ini terus membesar tanpa batas kalau tidak dibatasi. Hasilnya: disk cepat penuh walau aplikasi ringan.
🧩 1. Cek Log Driver Saat Ini
Pastikan container kamu pakai json-file:
docker inspect --format='{{.HostConfig.LogConfig.Type}}' <nama_container>
Jika hasilnya json-file, lanjut ke langkah berikut. Kalau journald atau lainnya, log akan dikelola oleh sistem atau service lain.
⚙️ 2. Buat atau Edit File /etc/docker/daemon.json
Kalau file belum ada, buat baru:
sudo nano /etc/docker/daemon.json
Isi dengan konfigurasi berikut:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
Penjelasan:
"max-size": "50m"→ batas ukuran 50 MB per file log"max-file": "3"→ simpan maksimal 3 file rotasi (jadi total ~150 MB per container)
🔁 3. Restart Docker
Setelah konfigurasi disimpan:
sudo systemctl restart docker
Pastikan tidak ada error saat restart. Kalau ingin cek status:
sudo systemctl status docker
🆕 4. Terapkan Ke Container Baru
Setting ini berlaku hanya untuk container yang dibuat setelah perubahan. Container lama tetap pakai konfigurasi sebelumnya. Untuk memperbarui container lama:
docker-compose up -d --force-recreate
atau jika manual:
docker rm -f <nama_container>
docker run ...
🔍 5. Verifikasi Konfigurasi
Cek container yang baru dibuat:
docker inspect --format='{{.HostConfig.LogConfig.Config}}' <nama_container>
Contoh hasil:
map[max-file:3 max-size:50m]
Artinya limit log sudah aktif ✅
📦 6. Opsional: Bersihkan Log Lama
Kalau ada log yang sudah terlanjur besar:
sudo find /var/lib/docker/containers/ -name "*-json.log" -exec sudo truncate -s 0 {} \;
⚠️ Jangan lakukan ini saat container sedang menulis log intensif (bisa freeze sementara).
📈 7. (Opsional) Monitoring Otomatis
Agar aman, kamu bisa pantau ukuran log dengan script sederhana:
#!/bin/bash
docker ps -a --format '{{.ID}}|{{.Names}}' | while IFS="|" read -r id name; do
log=$(docker inspect --format='{{.LogPath}}' "$id" 2>/dev/null)
if [ -n "$log" ] && [ -f "$log" ]; then
size=$(stat -c%s "$log")
human=$(numfmt --to=iec "$size")
echo "$human $name $log"
fi
done | sort -hr
→ Simpan sebagai docker-log-usage lalu jalankan bash docker-log-usage untuk cek log terbesar.
✅ Hasil Akhir
- Log container otomatis diputar (rotate) setiap 50 MB.
- Maksimal 3 file per container.
- Tidak perlu lagi hapus log manual.
- Disk space server lebih stabil.
