Cara Fix Error bwrap di Ubuntu 24.04 Docker untuk Codex CLI
Codex CLI gagal dengan error bwrap namespace di Ubuntu 24.04 Docker. Pelajari penyebab aslinya dan tiga cara fix yang terbukti berhasil agar patching jalan lagi.

Cara Fix Error bwrap di Ubuntu 24.04 Docker untuk Codex CLI
Gue lagi asik pakai Codex CLI di dalam Docker container Ubuntu 24.04, trus muncul error ini:
bwrap: No permissions to create a new namespace, likely because the kernel does not
allow non-privileged user namespaces. On e.g. debian this can be enabled with
'sysctl kernel.unprivileged_userns_clone=1'.Langsung setelah itu, Codex bilang dia ga bisa nemuin system bubblewrap di PATH dan bakal pakai vendored version sebagai gantinya. File patching berhenti total. Gue coba beberapa fix yang kelihatannya masuk akal, tapi semuanya gagal. Setelah investigasi, akhirnya ketemu root cause-nya. Post ini ngejelasin apa yang sebenernya terjadi, kenapa fix yang umum ga work, dan apa yang akhirnya berhasil.
Kenapa Ini Terjadi di Ubuntu 24.04
Pesan error-nya ngarahin lo ke fix sysctl lama dari Debian. Itu menyesatkan nih. Di Ubuntu 24.04, restriksinya datang dari AppArmor, bukan dari kernel.unprivileged_userns_clone.
Codex CLI pakai bubblewrap (bwrap) untuk sandbox file patching demi keamanan. bubblewrap bikin user namespace buat mengisolasi operasi file. Ubuntu 24.04 memperkenalkan AppArmor policy yang lebih ketat yang memblokir /usr/bin/bwrap dari pembuatan unprivileged namespace, bahkan untuk user root di dalam Docker container sekalipun.
Docker container berbagi kernel dengan host. Artinya AppArmor policy di host berlaku juga di dalam container. Makanya command yang jalan normal di Ubuntu versi lama atau Debian tiba-tiba rusak di Ubuntu 24.04.
Jalanin sudo sysctl -w kernel.unprivileged_userns_clone=1 di dalam container bakal kasih error read-only filesystem karena Docker container ga bisa ubah kernel parameter. Jalanin sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 juga bakal gagal total karena sysctl key itu ga ada di kebanyakan host kernel. Dua-duanya ga nyentuh masalah yang sebenarnya.
Tiga Fix yang Beneran Work
Fix 1: Jalanin Container dengan AppArmor Unconfined (Direkomendasikan)
Ini pendekatan paling bersih. Waktu lo start container, tambahkan opsi AppArmor security ini:
docker run --security-opt apparmor=unconfined \
-v $(pwd):/workspace \
-it ubuntu:24.04 bashUntuk Docker Compose, tambahkan ini ke service lo:
services:
your-service:
image: ubuntu:24.04
security_opt:
- apparmor:unconfined
volumes:
- .:/workspaceIni menghapus restriksi AppArmor hanya untuk container spesifik ini aja. Ga pengaruh ke container lain atau host. Begitu masuk, install bubblewrap dan Codex bakal nemuin otomatis:
apt-get update && apt-get install -y bubblewrapGa perlu trik chmod apapun. Codex CLI bakal pakai system bubblewrap dan patching jalan normal deh.
Fix 2: Bikin bwrap Setuid di Dalam Container
Kalau lo ga bisa restart container atau ga bisa ubah command docker run, workaround ini fix dari dalam. Jalanin sebagai root di dalam container:
# Install bubblewrap dulu
apt-get update && apt-get install -y bubblewrap
# Bikin bwrap jalan sebagai root untuk namespace creation
chmod u+s /usr/bin/bwrap
# Verifikasi setuid bit sudah aktif
ls -l /usr/bin/bwrap
# Expected: -rwsr-xr-x ... /usr/bin/bwrapHuruf s di string permission mengkonfirmasi setuid bit sudah aktif. Ini bikin bwrap pakai privilege root khusus untuk namespace creation, yang bypass restriksi AppArmor. Ini workaround yang sudah dikenal luas di Ubuntu 24.04 dan bekerja reliably kalau container sudah jalan sebagai root.
Fix 3: Tambahkan ke Dockerfile Lo
Kalau lo lagi build custom image dan mau setiap container langsung siap pakai:
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y bubblewrap && \
chmod u+s /usr/bin/bwrap && \
rm -rf /var/lib/apt/lists/*Ini bake fix ke image sehingga lo ga perlu mikirin lagi. Kombinasikan dengan --security-opt apparmor=unconfined waktu jalanin container untuk setup paling reliable.
Also Read: Kenapa Gue Pilih Codex CLI Sebagai Alternatif Claude Code: Review 2025
Troubleshooting: Kalau apt-get Juga Gagal
Kalau lo ga jalan sebagai root di dalam container, apt-get bakal gagal dengan error permission denied di lock file:
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)Cek dulu lo siapa:
whoamiKalau bukan root, bersihkan lock file yang stuck dan jalanin sebagai sudo:
sudo rm -f /var/lib/apt/lists/lock /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
sudo apt-get update && sudo apt-get install -y bubblewrapKalau sudo ga tersedia dan lo ga bisa restart container, cari vendored bubblewrap yang dibundel Codex dan terapkan setuid ke sana:
find / -name bwrap 2>/dev/null | grep -i codex
# Terus chmod u+s pada path yang ditemukanVerifikasi Fix Berhasil
Setelah menerapkan salah satu fix di atas, jalanin test manual cepat untuk konfirmasi bubblewrap bisa bikin namespace:
bwrap --ro-bind / / --dev /dev --proc /proc --unshare-pid -- echo "bwrap works"Kalau ini ngeprint “bwrap works” tanpa error, file patching Codex CLI bakal work. Kalau masih gagal, cek setuid bit sudah terpasang dengan ls -l /usr/bin/bwrap dan pastiin lo lihat -rwsr-xr-x di output-nya.
Also Read: Kenapa Docker Buildx Mengubah CI/CD Gue Selamanya
Kenapa Jangan Pakai —privileged
Jalanin Docker dengan --privileged memang fix masalah ini. Tapi itu kasih container akses penuh ke sistem host, bypass hampir semua restriksi keamanan. Makanya sebaiknya dihindari kecuali ada alasan spesifik. Flag --security-opt apparmor=unconfined adalah fix yang lebih tepat sasaran. Ini hanya menghapus restriksi AppArmor tanpa kasih container elevated capabilities di luar yang dibutuhkan.
Quick Reference
Kalau lo mau versi singkat dari ketiga opsi di atas:
Opsi satu untuk container baru. Tambahkan --security-opt apparmor=unconfined ke command docker run lo atau security_opt: [apparmor:unconfined] ke Docker Compose. Terus install bubblewrap seperti biasa.
Opsi dua untuk container yang sedang berjalan dan ga bisa direstart. Jalanin apt-get install -y bubblewrap diikuti chmod u+s /usr/bin/bwrap sebagai root di dalam container.
Opsi tiga untuk Dockerfile build. Tambahkan langkah install bubblewrap dan setuid ke image supaya selalu siap.
Root cause di semua kasus adalah AppArmor policy Ubuntu 24.04 yang memblokir pembuatan unprivileged namespace untuk bwrap. Fix-nya adalah menghapus restriksi itu di level container atau memberi bwrap setuid bit supaya bisa bikin namespace sebagai root.


