node.js - Docker-Compose Postgres 5432 绑定(bind) : Address already in use error

标签 node.js postgresql docker docker-compose ports

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

我正在尝试启动并运行一个简单的 postgres、express、node 应用程序。我希望能够运行 docker-compose up -d 并让它构建所有图像、卷等。然后我将运行一个 bash 脚本,用数据为我的 postgres 数据库播种。但是,我使用的端口总是出错。我已经删除了我所有的图像、容器,甚至重新安装了 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),但使用该端口时没有任何结果。我将计算机置于挂起模式并上床 sleep 。早上我醒来,将我的 postgres 版本更改为 9.6,看看是否是这样,一切正常。然后我将它切换回 postgres 10.0,再次一切正常。希望它不会再次弹出,但我不知道它为什么首先弹出。

最佳答案

出现此错误的原因只有一个。您在本地计算机上安装了 PostgreSQL 并且它正在运行,占用端口 5432。

您有以下选择:

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

    sudo service postgresql stop
    
    sudo update-rc.d postgresql disable
    
  2. 在 docker-compose 中使用不同的端口。应用'5433:5432'没有错。您的 docker-compose 的其他服务将通过 5432 端口连接到 postgres。在您的本地计算机上,您将能够通过 localhost:5433 寻址 postgres。

关于node.js - Docker-Compose Postgres 5432 绑定(bind) : Address already in use error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47069540/

相关文章:

node.js - 使用 'npm'时需要登录github

node.js - 在 Nodejs 中将回调转换为 RX.Observable

sql - Sequelize : overlapping - Checking if any value in array matches any value in the passed array

postgresql - 我截断了一个表。我如何取回数据?

visual-studio - 如何避免使用Visual Studio和Docker容器的API出现连接拒绝错误?

arrays - $in 在环回中不起作用

javascript - 包含返回 false

java - 如何通过 java 将 JSON 插入到 Postgres 中?

docker - 如何使用docker containerizer选项注册mesos-slave?

amazon-web-services - AWS Elastic Beanstalk Docker环境变量