How to Fix "Port is already allocated" Error in Docker

I’m sure we’ve encountered this error plenty of times, the one that looks like this.

ERROR: for postgres  Cannot start service postgres: driver
failed programming external connectivity on endpoint test_postgres_1
Bind for failed: port is already allocated

In this example, we have another container or an application listening on the port 5432 on our machine. This prevents our service from allocating that port.

Now, how can we fix this?

I was using docker-compose to start and stop my applications, so naturally, I used docker-compose ps to list all running containers and docker-compose down to stop those containers.

However, docker-compose commands only execute on containers related to images in our docker-compose.yml files. We also need to check containers started without docker-compose.

This is the process I would use to stop the correct containers.

First, I would stop all containers started by docker-compose (or just that one container).

docker-compose down

Then, I would list all running containers.

docker container ls -a
CONTAINER ID  IMAGE    ... PORTS                   NAMES
45eec0e12d63  postgres ...>5432/tcp  test_postgres_1

Let’s grab the CONTAINER ID and stop/remove the container.

docker stop 45eec0e12d63
docker rm 45eec0e12d63