Masalah koneksi Connection refused antara container Nextcloud dan Postgres di OpenWRT ternyata bukan berasal dari aplikasi atau konfigurasi Docker Compose, melainkan dari pengaturan default kernel OpenWRT yang tidak kompatibel dengan cara kerja Docker. Berikut rangkuman langkah-langkah yang telah kita lakukan:
📋 LATAR BELAKANG MASALAH
- Container Nextcloud (172.18.0.3) tidak bisa terhubung ke Postgres (172.18.0.2) dengan error Connection refused
- DNS dan layanan Postgres berjalan normal, ping antar container tidak stabil
- Rules iptables Docker tampak benar namun tidak berfungsi
- Penyebab utama: OpenWRT secara default mengaktifkan modul br_netfilter yang memfilter traffic bridge melalui iptables, sehingga traffic TCP port 5432 ditolak kernel sebelum masuk container.
🛠️ LANGKAH-LANGKAH PERBAIKAN
1. Backup Konfigurasi Awal
Pertama-tama kita buat cadangan file sysctl.conf untuk keamanan:
bash
cp /etc/sysctl.conf /etc/sysctl.conf.backup-$(date +%Y%m%d-%H%M%S)
2. Matikan Filter Bridge di Kernel (Sementara)
Jalankan perintah berikut di terminal OpenWRT untuk menerapkan perubahan secara sementara:
bash
sysctl -w net.bridge.bridge-nf-call-iptables=0
sysctl -w net.bridge.bridge-nf-call-ip6tables=0
sysctl -w net.bridge.bridge-nf-call-arptables=0
3. Buka Forward Traffic
Pastikan lalu lintas forward bisa berjalan dengan lancar:
bash
iptables -P FORWARD ACCEPT
iptables -I DOCKER-USER -j ACCEPT
4. Perbarui Konfigurasi Permanen
Edit file /etc/sysctl.conf untuk menjaga perubahan setelah reboot:
bash
nano /etc/sysctl.conf
Ubah/tambahkan baris berikut:
plaintext
net.bridge.bridge-nf-call-iptables=0
net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-arptables=0
Simpan file dan terapkan perubahan:
bash
sysctl -p
5. Restart Layanan Docker
Aktifkan semua konfigurasi dengan merestart Docker:
bash
/etc/init.d/dockerd restart
6. Verifikasi Koneksi
Masuk ke container Nextcloud, pasang client Postgres, dan uji koneksi:
bash
docker exec -it nextcloud-app bash
apt update && apt install -y postgresql-client
psql -h postgres -U nextcloud -d nextcloud
Setelah memasukkan password, muncul prompt nextcloud=# yang menandakan koneksi berhasil!
📌 KESIMPULAN
Masalah ini adalah kasus klasik Docker di OpenWRT yang sering membuat pengguna salah fokus ke komponen aplikasi. Pengaturan default kernel OpenWRT yang memfilter traffic bridge perlu diubah agar Docker bisa bekerja dengan optimal.
Dengan langkah-langkah di atas, koneksi antara Nextcloud dan Postgres dapat berjalan dengan stabil, dan konfigurasi akan tetap bertahan setelah sistem reboot.
