Cannot Assign Requested Address pada Docker: Penyebab, Verifikasi, dan Solusi Teknis Lengkap
Error Cannot assign requested address adalah kegagalan jaringan tingkat sistem operasi yang sering muncul saat menjalankan container Docker, melakukan port binding, atau ketika aplikasi di dalam container mencoba membuka koneksi TCP/UDP. Error ini bukan sekadar masalah Docker, melainkan indikasi bahwa sistem tidak mampu melakukan binding atau routing ke alamat IP atau port yang diminta.
Dalam praktik DevOps dan containerized environment, error ini umum terjadi karena Docker beroperasi di atas abstraction jaringan Linux seperti network namespace, virtual bridge, dan iptables. Kesalahan kecil pada konfigurasi alamat IP, port, atau interface jaringan dapat langsung memicu error ini, terutama pada lingkungan development lokal, server production dengan banyak service, atau pipeline CI/CD yang menjalankan container secara paralel.
Secara teknis, error Cannot assign requested address muncul ketika kernel menolak permintaan socket karena alamat tujuan tidak tersedia, tidak valid, atau tidak dapat dirutekan dari namespace jaringan tempat proses berjalan. Docker hanya menjadi medium yang memperlihatkan error tersebut ke pengguna.
Penjelasan Error Cannot Assign Requested Address
Error Cannot assign requested address biasanya muncul pada fase awal lifecycle container, tepatnya saat Docker mencoba melakukan port publishing (-p atau ports) atau ketika aplikasi di dalam container membuka socket outbound. Proses yang terhenti adalah binding socket ke alamat IP tertentu atau inisiasi koneksi ke alamat yang tidak dikenali oleh kernel.
Pada level Docker Engine, error ini sering terlihat saat menjalankan perintah docker run, docker-compose up, atau ketika service di-restart. Docker gagal menyiapkan network endpoint karena alamat yang diminta tidak tersedia pada host atau namespace container.
Lingkungan yang paling sering terdampak meliputi:
Linux host dengan banyak interface jaringan
Docker Desktop di macOS dan Windows dengan virtualized networking
Container yang menggunakan custom bridge network
Server dengan IPv6 aktif namun tidak dikonfigurasi dengan benar
CI runner berbasis container yang membatasi network namespace
Error ini tidak spesifik pada versi Docker tertentu, tetapi lebih sering muncul pada setup jaringan yang kompleks atau tidak konsisten.
Penyebab Utama Error Cannot Assign Requested Address
Binding ke Alamat IP yang Tidak Ada di Host
Penyebab paling umum adalah Docker diminta melakukan port binding ke alamat IP yang tidak terpasang pada host. Contoh klasik adalah menggunakan perintah:
docker run -p 192.168.1.50:8080:80 nginx
Padahal alamat 192.168.1.50 tidak terdaftar sebagai interface host. Kernel langsung menolak binding karena alamat tersebut tidak valid.
Port Sudah Digunakan oleh Proses Lain
Meskipun pesan error tidak menyebutkan “address already in use”, pada beberapa kondisi kernel mengembalikan error Cannot assign requested address ketika port sudah digunakan oleh proses lain, terutama pada kombinasi IPv4 dan IPv6 atau binding ke alamat spesifik.
Hal ini sering terjadi pada server production yang menjalankan banyak container atau service legacy.
Aplikasi di Dalam Container Mengikat ke IP yang Tidak Valid
Aplikasi di dalam container sering dikonfigurasi untuk bind ke alamat tertentu, misalnya:
server.listen("127.0.0.1", 3000)
Di dalam container, alamat tersebut bisa jadi tidak tersedia atau tidak sesuai dengan network namespace, sehingga aplikasi gagal start dan memunculkan error.
Konfigurasi Docker Network yang Tidak Konsisten
Custom Docker network dengan subnet yang bertabrakan dengan jaringan host atau VPN dapat menyebabkan kernel gagal melakukan routing. Konflik ini membuat alamat tujuan dianggap tidak dapat dijangkau.
Kasus ini sering muncul pada developer yang menggunakan VPN corporate bersamaan dengan Docker bridge network default.
IPv6 Aktif Tanpa Dukungan Aplikasi
Ketika IPv6 aktif di host, Docker dapat mencoba binding ke alamat IPv6. Jika aplikasi atau sistem tidak mendukung IPv6 secara penuh, kernel dapat menolak permintaan socket dengan error ini.
Exhaustion Ephemeral Port
Pada workload tinggi seperti stress testing atau CI pipeline paralel, host bisa kehabisan ephemeral port. Akibatnya, koneksi outbound baru gagal dengan error Cannot assign requested address, terutama pada aplikasi yang membuka banyak koneksi TCP pendek.
Cara Memverifikasi Penyebab Error Cannot Assign Requested Address
Memeriksa Alamat IP Host
Gunakan perintah berikut untuk memastikan alamat IP yang digunakan benar-benar tersedia:
ip addr show
Langkah ini memastikan bahwa alamat IP yang digunakan pada port mapping memang terdaftar di interface host.
Memeriksa Port yang Sedang Digunakan
Untuk memverifikasi apakah port sudah digunakan:
ss -tulnp | grep 8080
atau
lsof -i :8080
Tujuannya adalah memastikan tidak ada proses lain yang mengikat port tersebut.
Memeriksa Konfigurasi Docker Compose
Periksa file docker-compose.yml, terutama bagian ports dan networks. Pastikan tidak ada binding ke alamat IP statis yang tidak diperlukan.
Memeriksa Log Container
Gunakan:
docker logs <container_id>
Log aplikasi sering memberikan konteks tambahan, seperti alamat yang dicoba untuk di-bind oleh aplikasi.
Memeriksa Docker Network
Gunakan:
docker network ls
docker network inspect <network_name>
Langkah ini membantu mengidentifikasi konflik subnet atau konfigurasi network yang tidak valid.
Memeriksa Status IPv6
Gunakan:
sysctl net.ipv6.conf.all.disable_ipv6
Untuk memastikan apakah IPv6 aktif dan apakah aplikasi mendukungnya.
Solusi Utama Cannot Assign Requested Address
Gunakan Binding ke 0.0.0.0 atau Tanpa Alamat IP
Solusi paling stabil adalah membiarkan Docker melakukan binding ke semua interface:
docker run -p 8080:80 nginx
Docker akan mengikat port ke 0.0.0.0, sehingga kernel dapat memilih interface yang valid.
Perbaiki Konfigurasi Aplikasi di Dalam Container
Pastikan aplikasi bind ke 0.0.0.0, bukan ke IP spesifik:
server.listen(3000, "0.0.0.0")
Ini memastikan aplikasi dapat menerima koneksi dari luar container.
Gunakan Port yang Tidak Digunakan
Ganti port host jika terjadi konflik:
docker run -p 8081:80 nginx
Langkah ini menghindari benturan dengan proses lain.
Restart Docker Daemon
Pada beberapa kondisi network state Docker bisa korup. Restart daemon dapat mereset konfigurasi jaringan:
systemctl restart docker
Hapus dan Buat Ulang Docker Network
Jika menggunakan custom network:
docker network rm my_network
docker network create my_network
Ini menghilangkan konflik subnet yang tersembunyi.
Solusi Alternatif Berdasarkan Lingkungan
Local Development
Nonaktifkan VPN sementara atau ubah subnet Docker agar tidak bertabrakan dengan jaringan VPN. Docker Desktop menyediakan pengaturan khusus untuk subnet network.
Server Production
Batasi port publishing hanya pada interface yang diperlukan dan audit service yang berjalan. Gunakan reverse proxy seperti Nginx atau Traefik untuk mengurangi kebutuhan binding port langsung.
CI/CD Pipeline
Kurangi parallel job yang membuka koneksi outbound dalam jumlah besar. Atur net.ipv4.ip_local_port_range untuk memperluas rentang ephemeral port jika diperlukan.
Kesalahan yang Sering Dilakukan
Banyak pengguna mencoba memperbaiki error ini dengan mengganti image atau menghapus container tanpa memahami akar masalah jaringan. Pendekatan ini gagal karena error berasal dari kernel networking, bukan dari image Docker.
Kesalahan lain adalah memaksa binding ke alamat IP tertentu tanpa memastikan alamat tersebut tersedia. Praktik ini mempersempit fleksibilitas network dan meningkatkan risiko error.
Ada juga kecenderungan mengabaikan konfigurasi aplikasi di dalam container, padahal aplikasi yang bind ke alamat salah akan selalu gagal meskipun Docker sudah dikonfigurasi dengan benar.
Pencegahan Error Cannot Assign Requested Address di Masa Depan
Gunakan binding port generik tanpa alamat IP kecuali benar-benar diperlukan. Pastikan aplikasi selalu bind ke 0.0.0.0 di lingkungan container.
Kelola Docker network secara eksplisit dan hindari subnet yang bertabrakan dengan jaringan host atau VPN. Dokumentasikan konfigurasi network untuk environment production dan CI.
Pantau penggunaan port dan koneksi outbound pada host dengan workload tinggi. Sesuaikan kernel parameter jika diperlukan.
Gunakan Docker Compose dan infrastructure as code secara konsisten untuk menghindari konfigurasi jaringan yang tidak terdokumentasi.
Penutup
Error Cannot assign requested address pada Docker adalah sinyal bahwa sistem jaringan tidak mampu memenuhi permintaan binding atau koneksi yang diminta oleh container atau aplikasi di dalamnya. Masalah ini hampir selalu berkaitan dengan alamat IP, port, atau konfigurasi network yang tidak valid atau bertabrakan. Dengan memahami bagaimana Docker berinteraksi dengan kernel networking, memverifikasi kondisi host secara sistematis, dan menerapkan konfigurasi yang tepat, error ini dapat diselesaikan secara tuntas dan dicegah agar tidak terulang pada lingkungan development maupun production.
.webp)