CARA PERBAIKI KONEKSI ANTAR CONTAINER (CONNECTION REFUSED)

 

Masalah koneksi antar container Docker sering muncul di OpenWRT, padahal network dan layanan sudah dikonfigurasi dengan benar. Berikut solusi lengkapnya:

 

📋 LINGKUNGAN

 

- OpenWRT x86

- Docker + Docker Compose

- Jaringan: Bridge (docker0 atau custom bridge)

- Contoh layanan: Aplikasi & Database (misal Nextcloud & PostgreSQL)

 

🚨 GEJALA AWAL

 

- Semua container berjalan normal ( docker ps  menunjukkan status  Up )

- IP container ter-assign dengan benar di subnet yang sama

- Ping antar container tidak stabil (kadang berhasil, kadang gagal)

- Akses ke layanan di container lain muncul error  Connection refused 

 

🔍 PEMERIKSAAN AWAL

 

Cek Status Network Docker

 

bash

  

docker network ls

docker network inspect <nama-network-container>

 

 

Hasil yang diharapkan:

 

- Container berada di subnet yang sama (misal  172.18.0.0/16 )

- Alamat IP valid dan DNS container berfungsi dengan baik

 

Kesimpulan: Network Docker terbentuk dengan benar, masalah bukan dari konfigurasi jaringan Docker.

 

Uji Koneksi Via Network Namespace

 

bash

  

docker run --network container:<nama-container-target> busybox ping <nama-container-target>

 

 

Hasil yang diharapkan:

 

- Ping sukses 100% dengan latensi < 1 ms

 

Kesimpulan: Routing antar container sebenarnya berjalan, penghalang ada di level firewall.

 

🎯 PENYEBAB UTAMA

 

OpenWRT secara default tidak mengizinkan forwarding trafik antar antarmuka docker0 atau bridge custom. Iptables OpenWRT memblokir lalu lintas internal container meskipun Docker network sudah benar.

 

Periksa policy forwarding dengan perintah:

 

bash

  

iptables -L FORWARD -n

 

 

✅ CARA PERBAIKI

 

Langkah 1: Izinkan Forwarding untuk Docker

 

bash

  

# Izinkan trafik antar container di docker0

iptables -I FORWARD -i docker0 -o docker0 -j ACCEPT


# Izinkan trafik masuk dan keluar dari docker0

iptables -I FORWARD -i docker0 -j ACCEPT

iptables -I FORWARD -o docker0 -j ACCEPT

 

 

Langkah 2: Hapus Isolasi Docker (Jika Ada)

 

bash

  

iptables -D DOCKER-ISOLATION-STAGE-1 -j DROP 2>/dev/null

iptables -D DOCKER-ISOLATION-STAGE-2 -j DROP 2>/dev/null

 

 

Langkah 3: Restart Layanan Docker

 

bash

  

/etc/init.d/dockerd restart

 

 

✨ HASIL SETELAH PERBAIKI

 

- Container bisa saling mengakses port layanan

- Error  Connection refused  hilang

- Docker bridge berfungsi normal seperti di sistem Linux lainnya

 

⚠️ CATATAN PENTING

 

1. Khusus OpenWRT: Masalah ini tidak terjadi di distribusi Linux seperti Ubuntu/Debian yang secara default mengizinkan forwarding.

2. Rule Sementara: Rule iptables akan hilang setelah reboot. Untuk membuatnya tetap ada:

- Edit file  /etc/firewall.user 

- Tambahkan semua perintah iptables dari Langkah 1 dan 2 di akhir file

- Simpan lalu restart firewall:

bash

  

/etc/init.d/firewall restart

 

 

📌 KESIMPULAN

 

- Docker network tidak rusak

- Masalah bukan dari DNS, port, atau konfigurasi aplikasi

- Akar masalah: Policy forwarding iptables default di OpenWRT

- Solusi: Izinkan lalu lintas untuk antarmuka Docker secara manual

Loading...