Windows Docker Ghost Port Mapping: EMQX 1883 Silently Reserved by WinNAT Postmortem

Docker Desktop on Windows with a full stack (backend + EMQX 5.8.9 + TimescaleDB + Valkey). Backend ping/pong works, but mosquitto_pub keeps returning Connection refused. Other ports in docker ps map fine; only 1883 lacks the 0.0.0.0:1883-> prefix and Docker reports no error. Root cause: Hyper-V/WinNAT dynamic port reservation holds 1883 (in the 1802–1901 range). Four remediation options: swap port, temporary reclaim, admin allowlist, fix the dynamic port range.

2026-08-25 · 4 min · 645 words · Intent