json-file. Driver ini menangkap seluruh output stdout dan stderr dari proses di dalam container, mengonversinya menjadi teks terstruktur JSON, lalu menyimpannya langsung di filesystem host. Jika aplikasi Anda memiliki query lambat yang mencetak stack trace berulang kali atau worker background yang mencatat heartbeat setiap detik, file log tersebut akan membesar terus-menerus tanpa pernah dibersihkan otomatis.
Memeriksa file log container yang paling rakus
/var/lib/docker/. Log untuk setiap container disimpan spesifik di dalam folder ID container masing-masing di bawah subdirektori /var/lib/docker/containers/.
Kita bisa mengurutkan file log JSON terbesar secara langsung menggunakan perintah find dan du. Perintah ini murni membaca metadata file tanpa mengubah state container yang sedang berjalan:
BASH
find /var/lib/docker/containers/ -name '*-json.log' -exec du -h {} + | sort -hr | head -n 5a1b2c3d4...-json.log). Untuk mengetahui nama container aslinya dari ID tersebut, Anda cukup memotong 12 karakter pertama dari ID itu dan mencocokkannya lewat perintah docker ps -a --filter id=a1b2c3d4.
Mengetahui kenapa log tidak pernah terhapus
BASH
docker inspect --format '{{json .HostConfig.LogConfig}}' <nama-container>{"Type":"json-file","Config":{}}, artinya container tersebut berjalan tanpa parameter max-size maupun max-file. Tanpa dua parameter ini, Docker akan terus mengizinkan file log bertambah sampai disk VPS benar-benar penuh. Ketika disk menyentuh kapasitas 100%, proses lain di server bisa mati mendadak, mirip seperti saat sistem kehabisan RAM lalu memicu pembersihan paksa yang pernah kita bahas di panduan membaca log dmesg untuk memastikan aplikasi dimatikan OOM Killer.
Perlu diingat bahwa menghapus file *-json.log secara langsung menggunakan perintah rm saat container masih aktif adalah kesalahan umum. Linux tidak akan langsung membebaskan ruang disk jika proses Docker daemon masih membuka file descriptor ke file yang dihapus tersebut. Disk akan tetap terbaca penuh di perintah df -h meskipun file sudah tidak terlihat di direktori. Cara paling aman untuk mengosongkan log yang sedang terkunci tanpa harus mematikan container adalah dengan mengosongkan isinya secara in-place, misalnya lewat redirection shell truncate -s 0 /path/ke/file-json.log.
Memasang batas rotasi otomatis di Docker daemon
/etc/docker/daemon.json.
Jika file tersebut belum ada, Anda bisa membuatnya. Tambahkan directive log-driver dan log-opts agar Docker membatasi ukuran per file log dan jumlah arsip log lama yang boleh disimpan. Sebagai contoh aman untuk server produksi skala kecil hingga menengah, Anda bisa menetapkan max-size sebesar 50m dan max-file sebanyak 3 file. Dengan aturan ini, Docker akan otomatis memotong log begitu menyentuh 50 megabyte dan hanya menyimpan maksimal tiga file rotasi sebelum menghapus log paling usang.
Aturan di daemon.json ini hanya akan berlaku secara otomatis untuk container baru yang di-create setelah Docker daemon direstart. Container lama yang sudah terlanjur berjalan tetap mempertahankan konfigurasi aslinya, sehingga Anda perlu membuat ulang container tersebut (misalnya via docker compose down dan docker compose up -d) agar batas rotasi baru mulai aktif.
Menjaga agar log container tidak menghabiskan ruang simpan adalah langkah wajib dalam pemeliharaan VPS. Dengan mengonfigurasi batas ukuran log di level daemon dan membiasakan diri mengecek direktori /var/lib/docker/containers/, Anda mencegah insiden downtime konyol akibat disk penuh yang sebenarnya sangat mudah dihindari.