A 5-second page load survived a moved-off-Docker-Desktop UAT deploy, three red herrings (CPU governor, IPv6, disk contention), a crash-looping RabbitMQ broker, a silent Redis hang, and a one-digit port typo. The actual culprit: host.docker.internal doesn’t auto-resolve on native Linux Docker Engine like it does on Docker Desktop.
I spent two days chasing a 5-second page load that had no business existing. Along the way I blamed the CPU governor, IPv6, disk contention, and a laundry list of side projects running on the same box. All of those theories were reasonable. None of them were it. The real answer was one bad assumption baked into a couple of connection strings, and it wore three different disguises before I finally cornered it. The gist of it: host.docker.internal is a liar (on Linux).
Here’s the whole mess, in order, mistakes included.


