Cannot Assign Requested Address pada Docker: Penyebab, Verifikasi, dan Solusi Teknis Lengkap

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.