'Docker & Postgres: Failed to bind tcp 0.0.0.0:5432 address already in use
Problem
I'm trying to start postgres in a docker container on my Mac, but I keep getting the following error message
docker: Error response from daemon: driver failed programming external connectivity on endpoint postgres (8392b9e5cfaa28f480fe1009dee461f97e82499726f4afc4e916358dd2d2f61e): Error starting userland proxy: Failed to bind tcp 0.0.0.0:5432 address already in use.
I have postgres installed locally, but I stopped it and running
pg_ctl status
returns
pg_ctl: no server running
I've ran the following to check what's running on 5432
lsof -i tcp:5432
&
netstat -anp tcp | grep 5432
and nothing is running on the port.
Versions
Mac - OS X El Capitan Version 10.11.2
PostgreSQL - 9.5
Docker - Docker version 1.12.0-rc2, build 906eacd, experimental
Solution 1:[1]
If lsof -i :5432
doesn't show you any output, you can use sudo ss -lptn 'sport = :5432'
to see what process is bound to the port.
Proceed further with kill <pid>
Solution 2:[2]
If you execute lsof -i :5432
on the host you can see what process is bound to the port.
Some instance of Postgres is running. You can execute kill <pid>
to kill it if you want. You can also use 5432
instead of 5432:5432
in your docker command or docker-compose file and let docker choose the host port automatically.
Solution 3:[3]
The first thing you should do is stop PostgreSQL service. In most cases it fixed the issue.
sudo service postgresql stop
If above doesn't work. then add the following line to /etc/postgresql/12/main/postgresql.conf
sudo vim /etc/postgresql/12/main/postgresql.conf
## good if you add under CONNECTION AND AUTHENTICATION comments
listen_addresses = "*"
Solution 4:[4]
it is worked for me, probably you should stop postgres :
sudo systemctl stop postgresql
Solution 5:[5]
In some cases it is critical to perform a more in-depth debugging to the problem before stopping or killing the container/process.
Consider following the checklist below:
1) Check you current docker compose environment
Run docker-compose ps
.
If port is in use by another container, stop it with docker-compose stop <service-name-in-compose-file>
or remove it by replacing stop
with rm
.
2) Check the containers running outside your current workspace
Run docker ps
to see list of all containers running under your host.
If you find the port is in use by another container, you can stop it with docker stop <container-id>
.
(*) Because you're not under the scope of the origin compose
environment - it is a good practice first to use docker inspect to gather more information about the container that you're about to stop.
3) Check if port is used by other processes running on the host
For example if the port is 6379 run:
$ sudo netstat -ltnp | grep ':6379'
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 915/redis-server 12
tcp6 0 0 ::1:6379 :::* LISTEN 915/redis-server 12
(*) You can also use the lsof command which is mainly used to retrieve information about files that are opened by various processes (I suggest running netstat
before that).
So, In case of the output above the PID
is 915
. Now you can run:
$ ps j 915
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 915 915 915 ? -1 Ssl 123 0:11 /usr/bin/redis-server 127.0.0.1:6379
And see the ID of the parent process (PPID
) and the execution command.
You can also run: $ pstree -s <PID>
to a visual display of the process and its related processes (install with: brew install pstree
).
In our case we can see that the process probably is a daemon (PPID is 1) - In that case consider running:
A) $ cat /proc/<PID>/status
in order to get a more in-depth information about the process like the number of threads spawned by the process, its capabilities, etc'.
B) $ systemctl status <PID>
in order to see the systemd unit that caused the creation of a specific process. If the service is not critical - you can stop and disable the service.
4) Restart Docker service
Run sudo service docker restart
.
5) You reached this point and..
Only if its not placing your system at risk - consider restarting the server.
Solution 6:[6]
None of these other answers worked for me. (For example, lsof and netstat just returned empty lines.) The following worked, though:
sudo -u postgres pg_ctl -D /Library/PostgreSQL/13/data stop
Solution 7:[7]
Go to project and click on docker-compose.yml
version: '2'
services: web: build: . ports: - "8000:8000" volumes: - .:/app links: - db - mail-server db: image: "postgres" environment: POSTGRES_PASSWORD: hunter2 ports: - "5432:9432" mail-server: image: "mailhog/mailhog" expose: - 1025 ports: - "8026:8026"
" change the ports to 8026:8026 because there is already running another container on this port number only change the port number"
Solution 8:[8]
In case of mac,
- if you are OK with uninstalling the POSTGRES for the time being:
brew uninstall postgres
Then check if the process still exists
sudo lsof -nP -i4TCP:5432 | grep LISTEN
If it exists, then kill it
kill -9 <pid>
Check again if the 5432 is being listened at, this time it should not be.
Solution 9:[9]
macOS Monterey
None of the above commands worked for me - need to do few changes. So, adding the complete working solution:
Identify what is running in port 5432:
sudo lsof -i :5432
Kill all the processes that are running under this port:
sudo kill -9 <pid>
Run the command again to verify no process is running now:
sudo lsof -i :5432
Solution 10:[10]
I tried to sudo kill -9 <PID>
to disable postgres process, but it spawns again and again with a different PID. After that, I found that it stores a process under LaunchDemos
and it runs on every startup:
cd /Library/LaunchDemos/
sudo rm com.edb.launchd.postgresql-13.plist
- Restart your PC to apply changes.
Solution 11:[11]
If you execute sudo lsof -i :5432 on the host you can see what process is bound to the port.
- sudo service postgresql stop
- while lsof -Pi :5432 -sTCP:LISTEN -t; do sleep 1; done
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | |
Solution 3 | |
Solution 4 | |
Solution 5 | |
Solution 6 | Michael S. |
Solution 7 | |
Solution 8 | |
Solution 9 | Prateek Kumar Dalbehera |
Solution 10 | |
Solution 11 | Rahul Brahmbhatt |