1) Set listen_addresses='*' (cara aman via SQL) $env:PGPASSWORD="passwordKamu" & "C:\Program Files\PostgreSQL\16\bin\psql.exe" -h localhost -U postgres -d postgres ` -c "ALTER SYSTEM SET listen_addresses='*'; SELECT pg_reload_conf(); SHOW listen_addresses;" Remove-Item Env:\PGPASSWORD 2) Edit pg_hba.conf untuk izinkan koneksi dari Docker Cari folder data & file HBA: $img = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\postgresql-x64-16').ImagePath $dataDir = [regex]::Match($img,'-D\s+"([^"]+)"').Groups[1].Value $hba = Join-Path $dataDir 'pg_hba.conf' Copy-Item $hba "$hba.bak-$(Get-Date -Format yyyyMMddHHmmss)" Tambah rule minimal (untuk tes): Add-Content $hba "`r`nhost all all 0.0.0.0/0 md5" Nanti ganti 0.0.0.0/0 dengan subnet Docker (contoh 192.168.65.0/24 atau yang keluar dari docker network inspect bridge). 3) Restart service & cek port Restart-Service postgresql-x64-16 netstat -ano | findstr :5432 # harus LISTENING di 0.0.0.0:5432 4) (Jika perlu) Buka firewall Windows untuk 5432 New-NetFirewallRule -DisplayName "PostgreSQL 5432" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5432 -Profile Private 5) Test dari container docker run --rm alpine sh -c \ "apk add --no-cache postgresql15-client >/dev/null && \ PGPASSWORD=passwordKamu psql -h host.docker.internal -U postgres -d postgres -c 'select 1