Skip to content
VDS · Docker dan kontainer

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

GejalaKemungkinan penyebabYang harus dilakukan
Terus-menerus RestartingAplikasi crash saat startupdocker compose logs --tail 200, baca error pertama, bukan yang terakhir
Exit code 137, OOMKilled: trueKehabisan memoriNaikkan limit atau temukan kebocorannya, lihat batas resource
Exit code 1 tepat setelah startupKesalahan pada konfigurasi atau variabeldocker compose config — periksa substitusinya
port is already allocatedPort ditempati proses lainsudo ss -tulpn | grep :<port>
no space left on deviceRuang disk atau inode habisdf -h dan df -i, lihat ruang disk
permission denied pada file volumeUID tidak cocokdocker compose exec app id, lalu chown atau PUID/PGID
Aplikasi tidak dapat melihat databaseJaringan berbeda atau permintaan ke localhostLihat Jaringan Docker
Cannot connect to the Docker daemonLayanan tidak berjalan atau Anda tidak punya izinsudo systemctl status docker, grup docker
Semuanya lambat, load rendahHambatan diskiostat -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.