Bali, Indonesia
Insights

Cara Memeriksa Log Container Docker yang Bikin Disk VPS Penuh

October 18, 2026
0:00
Kapasitas disk VPS tiba-tiba menyentuh 100% padahal database tidak bertambah besar dan aplikasi web jarang menerima upload file. Saat dicek lebih lanjut, website mulai menampilkan error 500 karena service internal gagal menulis file temporary atau sesi pengguna. Masalah seperti ini sangat sering berakar dari satu hal sederhana: container Docker yang terus membuang log output ke storage tanpa batas rotasi sama sekali. Secara bawaan, Docker daemon menggunakan logging driver 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.
Langkah pertama saat VPS Anda kehabisan disk adalah memastikan apakah Docker memang menjadi penyebab utamanya. Di Linux, seluruh data runtime Docker biasanya tersimpan di bawah direktori /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 5
Jika salah satu baris menunjukkan ukuran belasan gigabyte, Anda sudah menemukan biang keroknya. Nama file tersebut diawali dengan ID panjang container (misalnya a1b2c3d4...-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.
Setelah mengetahui container mana yang menghasilkan log raksasa, langkah kedua adalah memeriksa apakah container tersebut memang sengaja dikonfigurasi tanpa batas atau hanya mewarisi setelan bawaan Docker daemon. Kita bisa memeriksa konfigurasi logging milik container tersebut dengan perintah inspeksi bawaan Docker:
BASH
docker inspect --format '{{json .HostConfig.LogConfig}}' <nama-container>
Jika output hanya menampilkan {"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.
Membersihkan file log secara manual hanya menunda masalah sampai disk penuh kembali beberapa hari ke depan. Solusi permanennya adalah membatasi ukuran log langsung dari konfigurasi global Docker daemon di host VPS Anda. Konfigurasi ini biasanya berada di file /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.