TL;DR: Pick a subnet that does not collide. Run `docker network inspect` on existing networks (and `ip route` for host routes) to see what is taken, then create yours with a free `--subnet`. The daemon refuses overlapping bridge subnets because routing between them would be ambiguous.

## The error

```text
Pool overlaps with other one on this address space
```

## Fix it

1. List subnets already in use by docker:
   `docker network inspect $(docker network ls -q) --format '{{.Name}} {{.IPAM.Config}}'`
   Expected: the subnet list, one of which overlaps yours.
2. Check host routes too (VPNs, VM interfaces):
   `ip route | grep -E "^10\.|^172\.|^192\.168"`
   Expected: host-side ranges to avoid.
3. Create with a free subnet:
   `docker network create --subnet CONTAINER_IP/24 mynet`
   Expected: network created.

## When this applies
- `docker network create --subnet` with a hardcoded range from docs or a compose file
- Moving compose projects between hosts with different network layouts

## When this does NOT apply
- "could not find an available pool" (exhaustion, not a specific collision)
- Overlaps reported by a VPN client (fix on the VPN side or renumber docker)

## Versions
All Docker Engine versions.

## Why it happens
Each bridge network gets its own subnet and the daemon programs iptables/NAT per network. Two networks sharing addresses would make container IPs ambiguous, so the daemon validates against all existing networks and host routes before creating.

## Edge cases
- Docker Desktop's internal VM has its own routes; a subnet free on your Mac may collide inside the VM.
- `--subnet` must include a valid gateway; the daemon picks .1 by default, so avoid assigning that to a container statically.
- Compose files hardcoding `ipam.config.subnet` from another environment are the most common source; parameterize per environment.
