# Cara Mengatasi No Space Left on Device Docker (7 Langkah)

> Cara mengatasi no space left on device Docker: ukur dengan docker system df, prune image lama, batasi log container dan journal tanpa menghapus data.

URL: https://www.matthewswong.com/id/blog/cara-mengatasi-docker-no-space-left-on-device/

- Author: Matthews Wong (https://www.matthewswong.com/id/about/)
- Published: 2026-10-17
- Updated: 2026-10-17
- Category: DevOps

> **Key takeaway:** Untuk mengatasi no space left on device di Docker, ukur dulu dengan df -h, docker system df, dan journalctl --disk-usage. Lalu prune image dan build cache lama dengan filter until, simpan hanya image terbaru, batasi log container dengan max-size dan max-file, vacuum journal, dan jangan pernah prune volume otomatis.

Error ini muncul di saat paling buruk: di tengah docker pull atau build, ketika deploy baru separuh jalan. Kamu jalankan lagi, gagal lagi, dan naluri pertama adalah menyalin perintah prune dari forum lalu berharap. Sebagian perintah itu menghapus data yang tidak bisa ditarik kembali.

Panduan ini memakai urutan yang lebih aman: lihat dulu, baru hapus. Tujuh langkah, masing-masing dengan perintah dan hasil yang diharapkan. Perintah pembersihannya berasal dari dokumentasi resmi Docker, dan pengaturan retensi serta log-nya adalah yang dipakai workflow deploy dan file compose situs ini.

Ingin memahami konsep di balik perintahnya, lengkap dengan explainer interaktif dan kuis? Baca lesson gratis

Docker No Space Left on Device: Cari Penyebab Disk Penuh

. Artikel ini adalah panduan praktiknya.

## Yang kamu butuhkan

Ada tiga hal yang perlu kamu siapkan sebelum mulai. Baca dulu, karena seluruh pendekatannya bergantung pada mengukur sebelum menghapus.

- Server Linux dengan Docker terpasang dan akses shell, sebaiknya dengan sudo.
- systemd di server itu, supaya journalctl tersedia. Kebanyakan distribusi populer memakainya.
- Lima menit untuk membaca setiap output sebelum menjalankan perintah berikutnya.

Semua path dan hostname di bawah adalah placeholder, misalnya ghcr.io/example/myapp. Ganti dengan milikmu. Kalau servernya produksi, lakukan langkah pengukuran dulu dan langkah penghapusan hanya setelah kamu tahu apa yang dihapus.

## Langkah 1: Pastikan disk benar-benar penuh

Jalankan df -h pada filesystem tempat data Docker disimpan. Use% mendekati 100 persen mengonfirmasi errornya, dan angka itu menjadi pembanding setelah pembersihan. Kalau disk tidak penuh, masalahnya ada di tempat lain dan prune tidak akan membantu.

Workflow deploy situs ini mencetak df -h sebelum dan sesudah setiap langkah pembersihan karena alasan yang sama. Log lalu menunjukkan berapa ruang yang benar-benar didapat tiap langkah, dan langkah yang tidak berefek terlihat, bukan tersembunyi di balik pesan sukses.

## Langkah 2: Lihat apa yang dipakai Docker sendiri

docker system df menampilkan berapa disk yang dipakai daemon Docker, dalam baris untuk image, container, dan volume lokal. Kolom RECLAIMABLE memperkirakan apa yang bisa dibebaskan. Tambahkan -v untuk satu baris per image, container, dan volume, termasuk ukuran unik yang hanya dipakai satu image dan ukuran yang dibagi dengan image lain.

Cari baris terbesar. Banyak image dengan 0 container berarti rilis lama menumpuk. Volume besar berarti data aplikasi, yang bukan untuk di-prune. Angkanya berbeda di tiap mesin, jadi baca output milikmu sendiri, jangan menebak dari output orang lain.

## Langkah 3: Periksa journal dan folder besar

Angka Docker tidak mencakup journal systemd. journalctl --disk-usage melaporkan total semua file journal arsip dan aktif. Kalau total Docker kecil tetapi disk penuh, daftar dari du membantu menemukan folder yang menyimpan sisanya.

Log container juga pelaku yang diam-diam. Driver json-file secara default menyimpan satu file log per container dan tidak pernah merotasinya sampai kamu menyetel max-size. Tidak ada perintah prune yang menyentuh file itu, karena itu langkah 6 berupa pengaturan, bukan pembersihan.

## Langkah 4: Prune dengan aman, pakai filter usia

docker image prune biasa hanya menghapus image dangling: tanpa tag dan tidak dipakai container mana pun. Image dari setiap deploy punya tag, jadi bertahan. Menambahkan -a memperluasnya ke setiap image yang tidak dipakai container, dan --filter until=72h membatasinya ke item yang lebih tua dari 72 jam. Build cache memakai filter until yang sama lewat docker builder prune.

Baca prompt konfirmasi setiap kali. Dokumentasi pruning menyebut dua hal dengan jelas: tiap perintah bertanya dulu sebelum menghapus kecuali kamu memberi -f, dan volume tidak pernah dihapus otomatis karena bisa menghilangkan data. Kalimat kedua itu alasan versi Right di atas tidak menyebut volume sama sekali.

> docker volume prune menghapus volume anonim yang tidak dipakai, docker volume prune --all juga menghapus volume bernama yang tidak dipakai, dan docker system prune --volumes menambahkan volume anonim ke system prune. Volume yang saat ini tidak dirujuk container tetap bisa berisi database. Jangan masukkan perintah volume ke skrip pembersihan, dan jangan salin dari forum tanpa membacanya.

## Langkah 5: Simpan hanya image terbaru

Filter usia mengandaikan laju deploy yang stabil. Workflow deploy situs ini begitu, sampai 19 deploy masuk dalam 40 jam: setiap image berusia kurang dari 72 jam, prune tidak menghapus apa pun, dan disk mencapai 93 persen. Perbaikannya adalah batas jumlah di samping filter usia. Skrip di atas mendaftar image aplikasi dari yang terbaru, melewati dua pertama, dan menghapus sisanya.

Dua sifat membuatnya aman. docker image rm tidak bisa menghapus image yang dipakai container yang berjalan kecuali kamu menambah -f, jadi jangan tambahkan -f di sini dan rilis yang aktif selamat. Dan menghapus image dari host tidak menghapusnya dari registry, jadi rilis lama bisa ditarik lagi. Dua image terbaru adalah yang sedang berjalan dan yang dibutuhkan untuk rollback.

## Langkah 6: Batasi log container agar tidak terulang

Driver json-file secara default punya max-size -1, artinya tanpa batas, dan max-file 1, yang hanya berlaku bila max-size juga disetel. File compose situs ini menyetel 10m dan 3, jadi tiap container menyimpan paling banyak tiga file log masing-masing hingga 10 MB. Untuk semua container baru di host, taruh opsi yang sama di /etc/docker/daemon.json lalu restart Docker.

Satu jebakan dari dokumentasi Docker: container yang sudah ada tidak otomatis memakai konfigurasi logging baru. Container yang dijalankan sebelum kamu mengubah pengaturan tetap berperilaku lama sampai dibuat ulang. Setelah dibuat ulang, log container itu berotasi dan berhenti tumbuh tanpa batas.

## Langkah 7: Vacuum journal dan pasang batas

journalctl --vacuum-size menghapus file journal arsip tertua sampai muat di bawah ukuran yang kamu beri. Perintah ini hanya menghapus file arsip, sedangkan --disk-usage menghitung file aktif juga, jadi totalnya bisa tetap di atas target. Itu wajar. Untuk membatasi journal secara permanen, setel SystemMaxUse di bagian Journal pada file drop-in di /etc/systemd/journald.conf.d/.

Setelah mengedit journald.conf, restart service systemd-journald. Man page mendokumentasikan opsi dan lokasi filenya tetapi tidak menjelaskan cara menerapkan perubahan, jadi cek dokumentasi distribusimu untuk langkah itu. Pakai vacuum untuk memulihkan ruang sekarang dan pengaturan itu agar masalahnya tidak kembali.

## Error umum dan cara memperbaikinya

Ini adalah kegagalan yang membuat pembersihan tampak sukses padahal disk tetap penuh, atau yang mengubahnya menjadi insiden.

| Gejala | Penyebab | Perbaikan |
| --- | --- | --- |
| docker image prune selesai tetapi disk masih penuh | prune biasa hanya menghapus image dangling, dan image hasil deploy punya tag | Tambahkan -a dengan filter until, lalu batasi dengan jumlah (langkah 4 dan 5) |
| until=72h tidak membebaskan apa pun di hari yang sibuk | Banyak deploy masuk dalam jendela itu, jadi tidak ada image yang lebih tua dari 72 jam | Tambahkan batas N terbaru dari langkah 5 dan cetak df sesudahnya |
| Log container terus membesar dan tidak ada prune yang menyentuhnya | max-size secara default tanpa batas, atau hanya max-file yang disetel | Setel max-size dan max-file, lalu buat ulang container |
| Journal masih di atas target vacuum | Vacuum hanya menghapus file arsip, dan file aktif ikut dihitung | Anggap wajar, dan setel SystemMaxUse untuk batas yang bertahan |
| Database kehilangan datanya setelah pembersihan | volume prune atau system prune --volumes menghapus volume yang tidak dirujuk container | Pulihkan dari backup, dan hapus semua perintah volume dari skrip pembersihan |
| Rollback lambat atau gagal setelah pembersihan | prune -a tanpa filter menghapus rilis sebelumnya, yang tidak dipakai container | Simpan dua image terbaru, dan tarik tag lama dari registry bila perlu |

## Checklist

Saya menjalankan df -h, docker system df, dan journalctl --disk-usage sebelum menghapus apa pun.

Pembersihan image dan build cache memakai filter until, bukan prune -a tanpa filter.

Dua image terbaru dipertahankan, dan docker image rm tidak pernah dijalankan dengan -f.

Setiap container menyetel max-size dan max-file, dan container lama sudah dibuat ulang.

Tidak ada perintah volume di skrip mana pun, dan journal punya batas SystemMaxUse.

## Belajar lebih dalam

Untuk melihat bagaimana semua bagian ini saling terkait, dengan diagram yang bisa dijalankan langkah demi langkah dan tiga pertanyaan kuis, baca lesson

. Untuk memperkecil image itu sendiri, yang juga memperlambat disk terisi, lihat

.

Aturan yang dibawa pulang: ukur dulu, prune menurut usia dan jumlah, batasi yang tumbuh sendiri, dan jangan sentuh volume. Disk yang pernah penuh akan penuh lagi, jadi pengaturan di langkah 5 sampai 7 lebih penting daripada pembersihan sekali jalan.

## Sumber dan bacaan lanjutan

- Dokumentasi Docker: prune objek Docker yang tidak dipakai
- Dokumentasi Docker: docker system df
- Dokumentasi Docker: driver logging JSON File
- man page: journalctl (--disk-usage, --vacuum-size)
- man page: journald.conf (SystemMaxUse)

## Source links

- https://docs.docker.com/engine/manage-resources/pruning/
- https://docs.docker.com/reference/cli/docker/system/df/
- https://docs.docker.com/engine/logging/drivers/json-file/
- https://man7.org/linux/man-pages/man1/journalctl.1.html
- https://man7.org/linux/man-pages/man5/journald.conf.5.html

## FAQ

### Kenapa Docker bilang no space left on device?

Filesystem tempat data Docker disimpan sudah penuh. Penyebab umumnya adalah image bertag dari setiap deploy, build cache, log container tanpa batas ukuran, dan journal systemd. Jalankan df -h dan docker system df untuk tahu yang mana sebelum menghapus apa pun.

### Apakah docker system prune aman dijalankan?

docker system prune biasa menghapus container yang berhenti, network yang tidak dipakai, image dangling, dan build cache yang tidak dipakai, dan tidak menyentuh volume. Menambah -a juga menghapus semua image yang tidak dipakai, termasuk rilis sebelumnya yang mungkin kamu butuhkan untuk rollback, dan --volumes menghapus volume anonim yang tidak dipakai. Baca prompt konfirmasinya dan pilih filter until.

### Apakah docker volume prune bisa menghapus database saya?

Bisa. docker volume prune menghapus volume anonim yang tidak dipakai, dan --all juga menghapus volume bernama yang tidak dipakai. Volume yang saat itu tidak dirujuk container tetap dianggap tidak dipakai walau berisi database, jadi jangan masukkan perintah volume ke skrip pembersihan.

### Bagaimana cara mencegah log Docker memenuhi disk?

Setel max-size dan max-file untuk driver logging json-file, misalnya 10m dan 3. max-size secara default tanpa batas dan max-file hanya berlaku bila max-size disetel. Container yang sudah ada tetap memakai logging lama sampai kamu membuatnya ulang.

### Kenapa disk masih penuh setelah docker image prune?

image prune biasa hanya menghapus image dangling, yaitu tanpa tag dan tidak dipakai, sedangkan image hasil deploy punya tag. Pakai -a dengan filter until, dan batasi jumlah image yang disimpan. Cek juga log dan journal, karena image prune tidak pernah menyentuhnya.

---

- HTML version: https://www.matthewswong.com/id/blog/cara-mengatasi-docker-no-space-left-on-device/
- English: https://www.matthewswong.com/en/blog/cara-mengatasi-docker-no-space-left-on-device/
- Site index for agents: https://www.matthewswong.com/llms.txt
- Sitemap: https://www.matthewswong.com/sitemap.xml
- API description (OpenAPI): https://www.matthewswong.com/openapi.json
