Docker和Postgres:无法绑定已使用的tcp 0.0.0.0:5432地址

use*_*424 11 postgresql macos docker

问题

我正试图在我的Mac上的docker容器中启动postgres,但我不断收到以下错误消息

docker:来自守护程序的错误响应:驱动程序在端点postgres上编程外部连接失败(8392b9e5cfaa28f480fe1009dee461f97e82499726f4afc4e916358dd2d2f61e):启动userland代理时出错:无法绑定已使用的tcp 0.0.0.0:5432地址.

我在本地安装了postgres,但我停止了它并运行

pg_ctl status
Run Code Online (Sandbox Code Playgroud)

回报

pg_ctl:没有服务器在运行

我运行了以下内容来检查5432上运行的是什么

lsof -i tcp:5432
Run Code Online (Sandbox Code Playgroud)

&

netstat -anp tcp | grep 5432
Run Code Online (Sandbox Code Playgroud)

并没有在港口上运行.

版本

Mac - OS X El Capitan版本10.11.2

PostgreSQL - 9.5

Docker - Docker版本1.12.0-rc2,build 906eacd,实验性的

Jam*_*mie 58

如果lsof -i :5432没有显示任何输出,您可以使用sudo ss -lptn 'sport = :5432'查看绑定到端口的进程。

继续进行 kill <pid>

  • 运行 `sudo lsof -i :5432` 然后 `kill &lt;pid&gt;` 对我有用。 (20认同)
  • 使用此命令,我得到“sudo:ss:找不到命令” - 知道是什么原因造成的吗? (5认同)
  • 系统范围的 Postgres 服务似乎正在该端口上运行。首先我们杀死它,然后允许 docker-compose 占用该端口。 (4认同)

Pra*_*era 36

macOS 蒙特利

上述命令都不适合我 - 需要做一些更改。因此,添加完整的工作解决方案:

  1. 确定端口 5432 中正在运行的内容:sudo lsof -i :5432

  2. 杀死该端口下运行的所有进程:sudo kill -9 <pid>

  3. 再次运行命令以验证现在没有进程正在运行:sudo lsof -i :5432

在此输入图像描述


blo*_*oop 20

__PRE__

似乎docker(1.12.0-rc3-beta18)正在使用postgres的一个实例(我杀死了服务并强制docker重启).为了解决这个问题,我将docker-compose lsof -i :5432部分kill <pid>改为just 5432,让docker自动选择端口.

  • 你有`sudo lsof -i :5432`的任何输出吗? (13认同)
  • 运行 sudo lsof -i :5432,然后运行kill &lt;PID&gt; (2认同)

STE*_*EEL 20

您应该做的第一件事是停止 PostgreSQL 服务。在大多数情况下,它解决了这个问题。

sudo service postgresql stop
Run Code Online (Sandbox Code Playgroud)

如果以上不起作用。然后将以下行添加到/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 = "*"
Run Code Online (Sandbox Code Playgroud)


sir*_*raj 10

它对我有用,也许你应该停止 postgres :

sudo systemctl stop postgresql

Run Code Online (Sandbox Code Playgroud)

  • 正如目前所写的,您的答案尚不清楚。请[编辑]添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以[在帮助中心](/help/how-to-answer)找到有关如何写出好的答案的更多信息。 (2认同)