Docker-Compose Postgres 5432 绑定:地址已在使用错误

Posted

技术标签:

【中文标题】Docker-Compose Postgres 5432 绑定:地址已在使用错误【英文标题】:Docker-Compose Postgres 5432 Bind: Address already in use error 【发布时间】:2018-04-14 15:17:42 【问题描述】:

好的,所以我现在已经搜索了 3-4 天,但我似乎无法找到解决我的错误的方法。我发现了类似的错误,其中一些似乎描述了我的确切问题,但没有一个解决方案有效。

我正在尝试启动并运行一个简单的 postgres、express、node 应用程序。我希望能够运行 docker-compose up -d 并让它构建所有图像、卷等。然后我将运行一个 bash 脚本,该脚本将为我的 postgres db 提供数据。但是,我使用的端口不断出现错误。我已经删除了所有的图像、容器,甚至重新安装了 docker,但我无法弄清楚。我从我的 docker-compose 中删除了除 postgres 之外的所有内容,但它仍然无法正常工作。

version: '3'
  services:
   postgres:
    image: postgres:10.0
    volumes:
      - /var/lib/postgresql/data
    ports:
     - '5432:5432'

然后在我的主机上,我只是计划运行以下 bash 脚本。

#!/bin/bash

host="postgres.dev"
adminUser="postgres"

psql -h $host -U $adminUser -c "select 1 from pg_database where datname = 'table_name';" | grep -q 1 || psql -h $host -U $adminUser -f ./"$(dirname $0)"/init-local-db.sql

我知道这种方法应该有效,因为我是在一个工作项目之后对其进行设计的……这对他们有用。但这是我得到的错误:

ERROR: for pg-db  Cannot start service postgres: driver failed programming external connectivity on endpoint pg-db (b3e5697cd563264250479682ec83d4a232d0d4bd679a787ad2089e944dda9e2f): Error starting userland proxy: listen tcp 0.0.0Creating test-api ... done

ERROR: for postgres  Cannot start service postgres: driver failed programming external connectivity on endpoint pg-db (b3e5697cd563264250479682ec83d4a232d0d4bd679a787ad2089e944dda9e2f): Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use
ERROR: Encountered errors while bringing up the project.

我知道有些人说只需更改端口号'5433:5432',但我的问题是,当您默认安装 postgres 时,它的端口是 5432,我知道没有必要更改它(因为工作项目没有)。有什么想法吗?

更新(第二天早上):

好吧,我仍然不知道为什么首先会弹出错误,因为我使用了 lsof -i tcp:5432 (以及 netstat )并且没有出现使用该端口的情况。我将电脑置于挂起模式,然后上床睡觉。早上我醒来,将我的 postgres 版本更改为 9.6,看看是不是这样,一切正常。然后我将其切换回 postgres 10.0,一切正常。希望它不会再次弹出,但我不知道为什么它首先弹出。

【问题讨论】:

哦,我在 Ubuntu 16.04 上使用 docker 17.09.0-ce 和 docker-compose 版本 1.17.0-rc1,构建 a0f95af 【参考方案1】:

您收到此错误的原因只有一个。你已经在本地机器上安装了 PostgreSQL,它正在运行,占用 5432 端口。

您有以下选择:

    在本地计算机上禁用(并从启动中删除)PostgreSQL。 - 你的 Docker Compose 将运行。

    sudo service postgresql stop
    
    sudo update-rc.d postgresql disable
    

    在 docker-compose 中使用不同的端口。应用 '5433:5432' 没有任何问题。您的 docker-compose 的其他服务将通过 5432 端口连接到 postgres。在您的本地计算机上,您将能够通过 localhost:5433 处理 postgres。

【讨论】:

我知道你可以做到这一点......但它增加了设置 postgres 的额外步骤,我试图让我的非技术客户的设置简单,他们希望能够在他们的基础上构建自己的机器,看看我的工作进度。 另外我使用 lsof 和 netstat 检查端口,它显示它未被使用。这就是一切的奇怪之处。所以我应该能够映射 5432 : 5432 因为我的主机没有使用该端口,并且我的容器也没有将它用于其他用途。今天早上一切都开始工作了……看看我的更新。 非常神秘 :) 不管怎样,很高兴听到你成功了。 谢谢!如果没有这个答案,我会迷路的!

以上是关于Docker-Compose Postgres 5432 绑定:地址已在使用错误的主要内容,如果未能解决你的问题,请参考以下文章

docker springboot 仅通过 docker-compose 在 postgres 5432 上连接

从 docker-compose 文件连接到 Postgres docker 容器 [重复]

docker-compose 与 postgres 的 Django 连接

docker-compose:nodejs容器不与postgres容器通信

无法从 docker-compose 启动 postgres docker 容器

docker-compose ECONNREFUSED 用于 nodeJS 上的 Postgres