Docker Compose "Bind for 0.0.0.0:5432 failed: port is already allocated"
Fix Docker Compose port conflicts between projects by removing or replacing a service's published ports with !reset or !override in an override file.
If docker compose up fails to start a container because another project or container is already using the same host port, the container is created but never starts:
Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint <project>-db-1 (<endpoint-id>): Bind for 0.0.0.0:5432 failed: port is already allocated
This is common when running two projects side by side that both publish a database (5432), Redis (6379) or a web server (80/8000) on the host.
Cause
The service has a ports: entry such as "5432:5432", which binds the container port to the same port on the host. Only one process can hold a host port, so the second projectβs container cannot start.
Often the published port is not needed at all: other services in the same Compose project reach the database over the internal network by service name (for example db:5432), not through the host.
Fix
Leave the original docker-compose.yml untouched and add an override file. This is useful when the Compose file belongs to someone else or is shared with a team.
Create an override file, for example compose.no-ports.yml:
services:
db:
ports: !reset []
Then start the project with both files:
docker compose -f docker-compose.yml -f compose.no-ports.yml up -d
The db service now publishes nothing on the host, and other containers in the project still reach it at db:5432.
If the port is still needed from the host
Publish it on a free host port instead, using !override to replace the list:
services:
db:
ports: !override
- "5433:5432"
Then connect from the host on localhost:5433.
Verify
docker compose -f docker-compose.yml -f compose.no-ports.yml ps
Every service should show as running. To see what currently holds the conflicting host port:
docker ps --filter "publish=5432"
# or, for processes outside Docker
sudo lsof -iTCP:5432 -sTCP:LISTEN
Notes
- Plain overrides do not work for ports. Compose merges
portsfrom multiple files by appending, so an override containingports: ["5433:5432"]keeps the original5432:5432as well and still fails.!reset(clear the list) and!override(replace the list) are what make the override take effect. !resetand!overrideneed Docker Compose v2.24.0 or later. Check withdocker compose version.- The same approach works for
volumes,environmentand other list or map fields that Compose merges rather than replaces. - Alternatively, stop the other project with
docker compose -p <other-project> down, but that is not an option if both need to run at once.