CCCPaste
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