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

スポンサーリンク

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

Pernahkah Anda menemui error “Error response from daemon: OCI runtime create failed” saat mencoba menjalankan container Docker? Error ini menunjukkan bahwa runtime container tingkat rendah Docker (runc) gagal menjalankan container. Dalam artikel ini, kami akan menjelaskan secara detail penyebab dan solusi spesifik untuk error ini berdasarkan informasi terbaru tahun 2026.

Apa itu Error ini? Gejala yang Mungkin Anda Alami

Error “OCI runtime create failed” terjadi ketika Docker mencoba membuat dan menjalankan container menggunakan runtime yang sesuai dengan OCI (Open Container Initiative). OCI adalah organisasi yang mendefinisikan standar industri untuk format container dan runtime, dan Docker menggunakan runc, yang mematuhi standar ini, untuk mengelola container.

Ketika error ini terjadi, Anda mungkin mengalami gejala-gejala berikut:

  • Container tidak dapat dijalankan dengan perintah docker run
  • Layanan gagal dimulai dengan docker-compose up
  • Log container menampilkan pesan “OCI runtime create failed”
  • Pesan error seperti “runc create failed: unable to start container process” muncul

Format pesan error biasanya terlihat seperti ini:

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

Error ini dapat terjadi di lingkungan Docker mana pun, termasuk lingkungan pengembangan, pipeline CI/CD, dan lingkungan produksi, yang sangat mempengaruhi pengembangan dan deployment aplikasi berbasis container.

Penyebab Error Ini

Ada beberapa kemungkinan penyebab untuk error OCI runtime create failed. Petunjuk kunci terdapat pada bagian setelah “caused:” dalam pesan error, jadi penting untuk memeriksa seluruh pesan error terlebih dahulu.

Penyebab 1: File Eksekusi Tidak Ditemukan

Salah satu penyebab paling umum adalah file eksekusi atau perintah yang ditentukan tidak ada di dalam container. Error ini terjadi ketika perintah yang ditentukan dalam ENTRYPOINT atau CMD Dockerfile tidak ada dalam image container.

Misalnya, jika Anda mencoba menjalankan perintah python pada base image yang tidak memiliki Python terinstal, Anda akan melihat error berikut:

exec: "python": executable file not found in $PATH

Ini sering terjadi saat menggunakan image ringan seperti Alpine Linux.

Penyebab 2: Kontrol Akses SELinux/AppArmor

Error ini juga dapat terjadi ketika modul keamanan seperti SELinux (Security-Enhanced Linux) atau AppArmor memblokir proses container atau operasi mount. Ini sangat bermasalah dalam situasi berikut:

  • Saat me-mount direktori host sebagai volume
  • Saat mengakses file device tertentu
  • Saat menjalankan container yang memerlukan operasi privileged

Di lingkungan dengan SELinux aktif, Anda mungkin melihat pesan error seperti:

write /proc/self/attr/keycreate: permission denied

Penyebab 3: Masalah Script Entrypoint

Error juga dapat terjadi ketika ada masalah dengan file script seperti entrypoint.sh yang ditentukan dalam Dockerfile. Penyebab utama meliputi:

  • File tidak disalin ke image
  • Path file salah
  • Izin eksekusi tidak diberikan
  • Line ending (CRLF) dari script yang dibuat di Windows tidak dikenali di Linux

Penyebab 4: Masalah Versi Docker atau runc

Error ini dapat terjadi ketika versi Docker atau runc tidak kompatibel dengan kernel OS host. Masalah ini sering dilaporkan terutama setelah upgrade di Proxmox VE dan lingkungan virtualisasi lainnya. Banyak kasus teratasi dengan upgrade ke Docker 25 atau lebih tinggi.

Penyebab 5: Masalah Konfigurasi cgroup

Error juga terjadi ketika konfigurasi cgroup (Control Groups) container tidak kompatibel dengan sistem host. Masalah ini sering dilaporkan, terutama selama periode transisi dari cgroupsv1 ke cgroupsv2.

Solusi 1: Periksa File Eksekusi dan Path (Direkomendasikan)

Solusi paling efektif untuk dicoba pertama kali adalah memverifikasi file eksekusi dan path di dalam container.

Langkah 1: Periksa Isi Image

Pertama, verifikasi bahwa perintah yang diperlukan ada di image yang bermasalah:

# Periksa filesystem di image
docker run --rm --entrypoint ls myapp:latest /usr/bin/

# Periksa apakah perintah tertentu ada
docker run --rm --entrypoint which myapp:latest python

Langkah 2: Modifikasi Dockerfile

Jika file eksekusi tidak ada, modifikasi Dockerfile untuk menginstal paket yang diperlukan:

# Untuk Alpine Linux
FROM alpine:latest
RUN apk add --no-cache python3 py3-pip

# Untuk Debian/Ubuntu
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3 python3-pip

Langkah 3: Verifikasi ENTRYPOINT dan CMD

Periksa bahwa ENTRYPOINT dan CMD dikonfigurasi dengan benar di Dockerfile:

# Contoh yang benar
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["python3", "app.py"]

# Menggunakan path absolut direkomendasikan
ENTRYPOINT ["/usr/local/bin/python3"]

Catatan Penting

  • Saat menggunakan shell script, selalu berikan izin eksekusi: RUN chmod +x /app/entrypoint.sh
  • Untuk script yang dibuat di Windows, konversi line ending menggunakan perintah dos2unix atau tangani di dalam Dockerfile

Solusi 2: Mengatasi Masalah SELinux/AppArmor

Berikut cara mengatasi error yang disebabkan oleh SELinux atau AppArmor.

Periksa Status SELinux

# Periksa status SELinux
sestatus

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

Konfigurasi Label untuk Mount Volume

Saat me-mount volume di lingkungan SELinux, atur label yang sesuai:

# Opsi :z (untuk volume bersama)
docker run -v /host/path:/container/path:z myapp:latest

# Opsi :Z (untuk volume privat)
docker run -v /host/path:/container/path:Z myapp:latest

Konfigurasi Label Persisten

Untuk direktori yang sering digunakan, Anda dapat mengatur label SELinux persisten:

# Atur konteks SELinux untuk container
chcon -Rt svirt_sandbox_file_t /path/to/volume

Nonaktifkan Label SELinux untuk Pengujian

Untuk keperluan troubleshooting, Anda dapat menonaktifkan sementara label SELinux:

docker run --security-opt label=disable myapp:latest

Penting: Menonaktifkan SELinux secara permanen tidak direkomendasikan di lingkungan produksi. Konfigurasi kebijakan yang sesuai setelah memahami sepenuhnya risiko keamanan.

Solusi 3: Upgrade Docker/runc dan Perubahan Konfigurasi (Lanjutan)

Solusi untuk masalah versi atau ketika diperlukan konfigurasi lanjutan.

Upgrade Docker

Jika Anda menggunakan versi Docker yang lama, upgrade ke versi terbaru:

# Untuk Ubuntu/Debian
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

Periksa dan Perbarui Versi runc

# Periksa versi runc
runc --version

# Perbarui runc secara terpisah jika diperlukan
sudo apt-get install runc

Modifikasi Konfigurasi systemd

Di beberapa lingkungan, Anda mungkin perlu memodifikasi konfigurasi systemd Docker:

# Edit file service Docker
sudo systemctl edit docker.service

# Tambahkan konfigurasi berikut (menyelesaikan masalah MountFlags)
[Service]
MountFlags=shared

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

Konfigurasi Driver cgroup

Jika ada masalah kompatibilitas driver cgroup, modifikasi konfigurasi daemon Docker:

# Edit /etc/docker/daemon.json
sudo nano /etc/docker/daemon.json

Tambahkan konten berikut:

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

Setelah konfigurasi, restart Docker:

sudo systemctl restart docker

Cara Mencegah Error Ini

Berikut adalah praktik terbaik untuk mencegah error OCI runtime create failed.

Praktik Terbaik Dockerfile

  1. Gunakan base image yang terpercaya: Gunakan image resmi atau terverifikasi dan pastikan mengandung dependensi yang diperlukan.

  2. Manfaatkan multi-stage build: Hindari menyertakan alat atau file yang tidak diperlukan di image final.

  3. Atur izin eksekusi secara eksplisit: Selalu jalankan chmod +x pada file script.

  4. Gunakan path absolut: Gunakan path absolut daripada relatif di ENTRYPOINT dan CMD.

Pemeliharaan Rutin

  1. Jaga Docker dan runc tetap terbaru: Lakukan update secara berkala untuk patch keamanan dan peningkatan kompatibilitas.

  2. Hapus image dan container yang tidak digunakan: Jalankan docker system prune secara berkala untuk membebaskan ruang disk.

  3. Monitor log: Periksa log sistem Docker secara berkala dengan journalctl -u docker.

Pengujian Pra-deployment

Selalu verifikasi bahwa container dapat dimulai dengan benar di lingkungan lokal atau staging sebelum men-deploy ke produksi. Memasukkan pengujian startup container ke dalam pipeline CI/CD Anda juga efektif.

Ringkasan

Error Docker “OCI runtime create failed” adalah error umum yang menunjukkan bahwa runtime container tidak dapat menjalankan container. Penyebab utama termasuk file eksekusi yang hilang, kontrol akses SELinux/AppArmor, error konfigurasi entrypoint, masalah versi Docker/runc, dan inkonsistensi konfigurasi cgroup.

Saat troubleshooting, penting untuk terlebih dahulu memeriksa bagian setelah “caused:” dalam pesan error untuk mengidentifikasi penyebab spesifik. Dalam banyak kasus, masalah dapat diselesaikan dengan memodifikasi Dockerfile atau menambahkan opsi mount volume.

Jika masalah berlanjut, coba langkah-langkah berikut:

  1. Periksa informasi error lebih detail dengan docker logs atau journalctl
  2. Cari masalah serupa di forum resmi Docker atau Stack Overflow
  3. Pertimbangkan untuk upgrade versi Docker Anda
  4. Verifikasi kompatibilitas antara kernel OS host dan Docker

Teknologi container berkembang setiap hari, dan banyak masalah teratasi di versi yang lebih baru. Pertahankan lingkungan container yang stabil melalui update berkala dan manajemen konfigurasi yang tepat.

Referensi

コメント

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