The default bridge has a critical gap
Containers on Docker's default bridge network can talk to each other only by IP — and IPs change on restart. There is no DNS resolution between containers on the default bridge.
Custom bridge networks fix this
On a custom bridge network, Docker runs an embedded DNS server (at 127.0.0.11 inside containers). Containers resolve each other by container name. curl http://api:8000 just works.
This is why every multi-container setup beyond "two test containers" should use a custom network.