Docker: pemecahan masalah umum
Container terus restart, port sudah digunakan, tidak ada ruang tersisa, “permission denied”, layanan tidak bisa melihat tetangganya — tabel gejala dan prosedur pemecahan masalah.
Diperbarui 23 Agustus 2026
Hampir semua masalah container bermuara pada selusin masalah umum. Diagnosis selalu dimulai dengan tiga perintah yang sama.
Tiga perintah pertama
docker compose ps
docker compose logs --tail 100 <service>
docker inspect -f '{{.State.Status}} {{.State.ExitCode}} {{.State.OOMKilled}} {{.State.Error}}' <container>
Status, baris terakhir log, dan exit code menjawab sebagian besar pertanyaan. Setelah itu, telusuri berdasarkan gejalanya.
Tabel gejala
| Gejala | Kemungkinan penyebab | Yang harus dilakukan |
|---|---|---|
Terus-menerus Restarting | Aplikasi crash saat startup | docker compose logs --tail 200, baca error pertama, bukan yang terakhir |
Exit code 137, OOMKilled: true | Kehabisan memori | Naikkan limit atau temukan kebocorannya, lihat batas resource |
| Exit code 1 tepat setelah startup | Kesalahan pada konfigurasi atau variabel | docker compose config — periksa substitusinya |
port is already allocated | Port ditempati proses lain | sudo ss -tulpn | grep :<port> |
no space left on device | Ruang disk atau inode habis | df -h dan df -i, lihat ruang disk |
permission denied pada file volume | UID tidak cocok | docker compose exec app id, lalu chown atau PUID/PGID |
| Aplikasi tidak dapat melihat database | Jaringan berbeda atau permintaan ke localhost | Lihat Jaringan Docker |
Cannot connect to the Docker daemon | Layanan tidak berjalan atau Anda tidak punya izin | sudo systemctl status docker, grup docker |
| Semuanya lambat, load rendah | Hambatan disk | iostat -x 2, lihat kecepatan disk |
Container crash, tetapi log kosong
Ini terjadi ketika proses mati sebelum sempat mencetak apa pun. Jalankan image secara manual dengan shell alih-alih perintah utamanya:
docker run --rm -it --entrypoint sh <image>
Di dalamnya, jalankan perintah startup secara manual — error akan muncul di layar. Selagi di sana, periksa apakah file konfigurasi sudah ada:
docker compose run --rm app cat /app/config.yaml
Perubahan tidak diterapkan
Kasus klasik: Anda mengedit file, restart, dan tidak ada yang berubah.
docker compose config # does Compose see your changes
docker compose up -d --force-recreate app
docker compose exec app cat /etc/app/config.yaml
Biasanya ada dua penyebab: file di-mount di tempat lain daripada yang Anda kira, atau container melihat salinan yang masuk ke image saat build.
Jangan mengatasi masalah ini dengan
docker system prune -a. Perintah itu menghapus image, jaringan, dan build cache yang tidak terpakai, dan dengan flag--volumes, volume berisi data juga. Sebuah volume menjadi "tidak terpakai" begitu container-nya dihentikan. Cari tahu dulu penyebabnya, baru bersihkan.
Kapan sebaiknya membersihkan
docker system df
docker image prune
docker builder prune
docker container prune
docker system df akan menunjukkan apa tepatnya yang memakan ruang: image, build cache, volume, atau log container. Biasanya build cache penyebabnya — menghapusnya aman.
Jika mesin tidak responsif
SSH tidak tersambung, situs tidak terbuka — biasanya sebuah container telah menghabiskan memori dan sistem masuk ke swap. Masuklah melalui konsol di panel mesin. Untuk htop dan btop, Anda memerlukan mode "Screen": ukuran jendela tidak diteruskan melalui baris teks, jadi selalu 80×24.
free -h
sudo dmesg -T | tail -40
sudo systemctl restart docker
Jika sistem tidak mau boot sama sekali, alihkan mode boot ke disk pemulihan SystemRescue di tab "Access": mesin akan reboot ke sana, login root tanpa kata sandi, dan disk akan terlihat sebagai /dev/sda. Dari sana, Anda dapat me-mount partisi dan mengambil datanya.
Yang perlu diperiksa sebelum, bukan sesudah
- Batas ukuran log sudah diatur — lihat log container.
- Batas memori sudah diatur untuk semua layanan.
- Versi image sudah dipatok, dan image lama belum dihapus — lihat pembaruan container.
- Salinan data sudah ada dan sudah diverifikasi — lihat uji pemulihan.