Cara Mengatasi Error “OCI runtime create failed” di Docker [Panduan Terbaru 2026]

スポンサーリンク

Cara Mengatasi Error “OCI runtime create failed” di Docker [Panduan Terbaru 2026]

Apakah Anda mendapatkan pesan “Error response from daemon: OCI runtime create failed” saat mencoba menjalankan container Docker? Artikel ini memberikan panduan lengkap dan terbaru untuk tahun 2026 tentang penyebab dan solusi spesifik untuk error ini. Baik Anda pemula maupun pengguna tingkat lanjut, panduan langkah demi langkah ini akan membantu Anda menyelesaikan masalah.

Apa Itu Error Ini? Gejala yang Akan Anda Alami

Error “OCI runtime create failed” menunjukkan bahwa runtime container tingkat rendah Docker, yaitu runc, tidak dapat memulai proses container. OCI (Open Container Initiative) adalah organisasi industri yang mendefinisikan standar container, dan Docker menggunakan runtime yang sesuai dengan OCI untuk mengelola container.

Saat error ini terjadi, terminal Anda akan menampilkan pesan seperti:

docker: Error response from daemon: OCI runtime create failed:
container_linux.go:380: starting container process caused: exec: "python":
executable file not found in $PATH: unknown.

Atau:

Error response from daemon: failed to create shim: OCI runtime create failed:
runc create failed: unable to start container process: error during container init:
error mounting "proc" to rootfs at "/proc": permission denied

Saat error ini terjadi, container Anda sama sekali tidak akan berjalan. Perintah docker run langsung mengembalikan error, sehingga tidak mungkin mengakses aplikasi apa pun di dalam container. Error ini tidak hanya terjadi di lingkungan pengembangan, tetapi juga di pipeline CI/CD produksi (CircleCI, GitHub Actions, dll.) dan kluster Kubernetes, yang menyebabkan deployment terblokir sepenuhnya.

Yang membuat error ini sangat menjengkelkan adalah pesan errornya panjang dan kompleks, sehingga sulit mengidentifikasi akar masalah pada pandangan pertama. Namun, petunjuk kunci tersembunyi di bagian setelah “caused:” dalam pesan error. Artikel ini menjelaskan cara membaca petunjuk tersebut dan memberikan solusi untuk setiap pola.

Penyebab Error Ini

Error “OCI runtime create failed” memiliki lima penyebab utama. Memahami setiap pola akan membantu Anda mengidentifikasi masalah dengan cepat dari pesan error.

Penyebab 1: File Eksekusi Tidak Ditemukan (executable file not found in $PATH)

Ini adalah salah satu penyebab paling umum. Terjadi ketika file eksekusi yang ditentukan di ENTRYPOINT atau CMD Dockerfile tidak ada di $PATH image container. Kasus spesifik meliputi:

  • Kesalahan ketik pada nama perintah (misalnya menulis pytohn alih-alih python)
  • Image dasar tidak menyertakan perintah yang diperlukan (misalnya bash tidak ada di image alpine)
  • Lupa menyalin binary ke image akhir dalam multi-stage build
  • Pengaturan WORKDIR yang salah sehingga path script tidak dapat diresolver

Penyebab 2: Masalah Izin (permission denied)

Terjadi ketika proses startup container tidak memiliki izin akses yang diperlukan ke file atau direktori. Kasus umum meliputi:

  • Script entrypoint tidak memiliki izin eksekusi (chmod +x)
  • SELinux atau AppArmor di mesin host memblokir akses file container
  • Pelabelan volume bind mount yang tidak tepat
  • Kepemilikan file yang rusak di bawah /var/lib/docker

Penyebab 3: Versi Docker atau runc yang Usang

Versi lama Docker Engine, containerd, atau runc dapat menyebabkan masalah kompatibilitas dengan fitur kernel terbaru. Khususnya, Docker versi di bawah 25 dilaporkan bermasalah pada distribusi Linux terbaru. Kompatibilitas juga bisa rusak setelah upgrade OS host (misalnya Proxmox VE 8.1 ke 8.2).

Penyebab 4: Masalah Kompatibilitas cgroup v2

Distribusi Linux terbaru (Ubuntu 22.04+, Fedora 31+, dll.) mengaktifkan cgroup v2 secara default. Versi lama Docker atau runc yang tidak mendukung cgroup v2 akan menghasilkan error seperti:

OCI runtime create failed: runc create failed: unable to start container process:
error during container init: error setting cgroup config for procHooks process

cgroup v2 memerlukan kernel 4.15 atau lebih tinggi (disarankan 5.2+).

Penyebab 5: Kehabisan Ruang Disk dan Konflik Sumber Daya

Ketika image dan container Docker menghabiskan ruang disk yang tersedia, error ini muncul dengan pesan no space left on device. Konflik dengan port atau direktori yang sudah digunakan juga dapat menyebabkan error ini.

Solusi 1: Membaca Pesan Error dan Memperbaiki Masalah Eksekusi (Disarankan)

Pendekatan yang paling penting dan efektif adalah membaca dan menginterpretasikan pesan error dengan akurat. Untuk error ini, alasan kegagalan spesifik tercantum setelah caused:.

Langkah 1: Analisis Pesan Error

Pertama, periksa pesan error dengan cermat. Berikut struktur tipikalnya:

Error response from daemon: OCI runtime create failed:
container_linux.go:380: starting container process caused:
exec: "python": executable file not found in $PATH: unknown

Dalam kasus ini, setelah caused:, tertulis exec: "python": executable file not found in $PATH. Ini berarti perintah “python” tidak ditemukan di PATH container.

Langkah 2: Periksa dan Perbaiki Dockerfile

Jika error terkait dengan file eksekusi, periksa Dockerfile Anda:

# Contoh salah: image alpine tidak menyertakan python
FROM alpine:latest
CMD ["python", "app.py"]

# Contoh benar: gunakan image Python resmi
FROM python:3.12-slim
COPY app.py /app/
WORKDIR /app
CMD ["python", "app.py"]

Untuk error bash tidak ditemukan (umum pada image berbasis Alpine Linux):

# Contoh salah
RUN /bin/bash -c "echo hello"

# Contoh benar: Alpine menyertakan ash secara default
RUN /bin/sh -c "echo hello"

# Atau instal bash
RUN apk add --no-cache bash

Langkah 3: Verifikasi File di Dalam Container

Anda dapat menjalankan image secara interaktif untuk memverifikasi keberadaan file:

# Masuk ke container dengan shell yang ditentukan
docker run --rm -it --entrypoint /bin/sh myimage:latest

# Periksa perintah di PATH
which python
echo $PATH
ls -la /app/

Catatan Penting

  • Jika menggunakan multi-stage build, verifikasi bahwa semua binary yang diperlukan disalin ke tahap akhir
  • Jika ENTRYPOINT dan CMD keduanya diatur, periksa bagaimana keduanya digabungkan (bentuk exec vs bentuk shell)
  • Verifikasi bahwa instruksi COPY menyalin file dengan benar dan .dockerignore tidak mengecualikannya

Solusi 2: Memperbaiki Izin dan Kebijakan Keamanan

Jika pesan error mengandung “permission denied”, masalahnya terkait dengan izin atau kebijakan keamanan.

Berikan Izin Eksekusi ke Script Entrypoint

# Berikan izin eksekusi secara lokal
chmod +x entrypoint.sh

# Berikan izin di Dockerfile
COPY entrypoint.sh /app/
RUN chmod +x /app/entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]

Penanganan Lingkungan SELinux

Di lingkungan dengan SELinux aktif (RHEL, CentOS, Fedora, dll.), kebijakan mungkin memblokir akses container ke file host.

# Periksa status SELinux
sestatus

# Periksa log penolakan SELinux
sudo ausearch -m avc -ts recent

# Metode 1: Tambahkan suffix :z atau :Z saat mount volume (disarankan)
docker run -v /host/data:/container/data:z myapp:latest

# Metode 2: Nonaktifkan label SELinux untuk debugging (tidak disarankan untuk produksi)
docker run --security-opt label=disable myapp:latest

Suffix :z membuat volume dapat dibagikan antar beberapa container, sedangkan :Z melabelinya secara eksklusif untuk container tersebut. Selalu gunakan :z atau :Z di produksi dan hindari label=disable.

Penanganan Lingkungan AppArmor

Masalah serupa dapat terjadi dengan AppArmor di Ubuntu dan sistem lainnya. Khususnya, sejak patch keamanan containerd.io 1.7.28-2 pada November 2025, error terkait AppArmor meningkat saat menjalankan Docker di dalam container LXC bersarang.

# Nonaktifkan profil AppArmor untuk debugging (tidak disarankan untuk produksi)
docker run --security-opt apparmor=unconfined myapp:latest

# Periksa status AppArmor
sudo aa-status

Perbaiki Kepemilikan File

# Periksa kepemilikan /var/lib/docker
ls -la /var/lib/docker/

# Restart daemon Docker jika diperlukan
sudo systemctl restart docker

Solusi 3: Upgrade Docker/runc dan Perbaiki Pengaturan cgroup (Lanjutan)

Masalah kompatibilitas versi dan konfigurasi kernel memerlukan perbaikan tingkat yang lebih dalam.

Upgrade Docker Engine

Upgrade ke Docker 25 atau lebih tinggi menyelesaikan banyak masalah kompatibilitas.

# Periksa versi Docker saat ini
docker version

# Untuk Ubuntu/Debian: upgrade dari repositori resmi Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Untuk CentOS/RHEL
sudo yum update docker-ce docker-ce-cli containerd.io

Upgrade runc Secara Terpisah

Anda juga dapat mengupgrade runc secara independen:

# Periksa versi runc
runc --version

# Instal runc terbaru dari rilis GitHub
wget https://github.com/opencontainers/runc/releases/download/v1.2.5/runc.amd64
sudo install -m 755 runc.amd64 /usr/local/sbin/runc

Atasi Kompatibilitas cgroup v2

Jika Anda mengalami error terkait cgroup v2:

# Periksa versi cgroup saat ini
stat -fc %T /sys/fs/cgroup/
# "cgroup2fs" berarti v2 aktif

# Periksa versi kernel (disarankan 5.2+)
uname -r

Metode A: Modifikasi konfigurasi daemon Docker

# Edit /etc/docker/daemon.json
sudo tee /etc/docker/daemon.json <<EOF
{
  "default-cgroupns-mode": "host",
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# Restart Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

Metode B: Kembali ke cgroup v1 (tidak disarankan tetapi efektif dalam keadaan darurat)

Tambahkan parameter berikut ke parameter boot GRUB untuk memaksa cgroup v1:

# Edit /etc/default/grub
GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0"

# Update GRUB dan reboot
sudo update-grub
sudo reboot

Periksa dan Bebaskan Ruang Disk

# Periksa ruang disk yang digunakan Docker
docker system df

# Hapus semua image, container, dan volume yang tidak digunakan
docker system prune -a --volumes

# Hapus image yang menggantung
docker image prune

Periksa Konfigurasi Layanan systemd

Di beberapa lingkungan, konfigurasi file unit systemd Docker dapat menyebabkan masalah:

# Periksa file unit layanan Docker
sudo systemctl cat docker.service

# Jika MountFlags=slave diatur, hapus
sudo systemctl edit docker.service
# [Service]
# MountFlags=

# Terapkan perubahan
sudo systemctl daemon-reload
sudo systemctl restart docker

Cara Mencegah Error Ini

Ikuti praktik terbaik berikut untuk mencegah error “OCI runtime create failed”.

1. Ikuti Praktik Terbaik Dockerfile

  • Gunakan image resmi sebagai dasar
  • Dalam multi-stage build, verifikasi bahwa tahap akhir berisi semua file yang diperlukan
  • Pahami dan gunakan dengan benar perbedaan antara ENTRYPOINT dan CMD
  • Konfigurasikan file .dockerignore dengan tepat

2. Uji Secara Menyeluruh di Lokal

# Uji bahwa image yang dibangun berjalan dengan benar
docker build -t myapp:test .
docker run --rm myapp:test

3. Jaga Lingkungan Docker Tetap Terbaru

Perbarui Docker Engine, containerd, dan runc secara berkala. Terapkan pembaruan minor yang berisi patch keamanan dengan segera.

4. Pantau Ruang Disk Secara Teratur

# Periksa penggunaan disk secara berkala
docker system df
# Pembersihan berkala sumber daya yang tidak digunakan
docker system prune -f --filter "until=168h"

5. Tetapkan Versi Docker di Pipeline CI/CD

Saat menggunakan Docker di CI/CD, tetapkan versi Docker untuk mencegah masalah kompatibilitas yang tidak terduga.

Ringkasan

Error “OCI runtime create failed” Docker mungkin terlihat kompleks, tetapi dengan membaca bagian setelah caused: dalam pesan error secara cermat, mengidentifikasi akar masalah relatif mudah.

Poin-poin utama:

  1. Eksekusi tidak ditemukan → Periksa ENTRYPOINT/CMD di Dockerfile dan tentukan path serta perintah yang benar
  2. Error izin → Periksa izin eksekusi script dan pengaturan SELinux/AppArmor
  3. Masalah kompatibilitas versi → Upgrade Docker, runc, dan kernel ke versi terbaru
  4. Masalah terkait cgroup → Sesuaikan pengaturan cgroup di daemon.json
  5. Masalah ruang disk → Bersihkan sumber daya yang tidak perlu dengan docker system prune

Jika metode dalam artikel ini tidak menyelesaikan masalah Anda, coba:

  • Posting pertanyaan di Docker Community Forums (forums.docker.com)
  • Cari issue di repositori GitHub moby/moby
  • Tanyakan di Stack Overflow dengan output docker info dan docker version

Menyalin pesan error lengkap dan mencarinya adalah langkah pertama yang paling efisien menuju penyelesaian.

Referensi

コメント

タイトルとURLをコピーしました