无法连接到 Docker Compose 中的 Postgres 数据库

Unable to connect to the Postgres database in Docker Compose

我正在构建一个 Node JS Web 应用程序。我正在为数据库使用 Postgres SQL 和 Sequelize。

我有 docker-compose.yaml 内容如下。

    version: '3.8'

services:
  web:
    container_name: web-server
    build: .
    ports:
      - 4000:4000
    restart: always
    depends_on:
      - postgres
  postgres:
    container_name: app-db
    image: postgres:11-alpine
    ports:
      - '5431:5431'
    environment:
      - POSTGRES_USER=docker
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=babe_manager
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    build:
      context: .
      dockerfile: ./pgconfig/Dockerfile
volumes:
  app-db-data:

我正在使用以下凭据连接到数据库。

DB_DIALECT=postgres
DB_HOST=postgres
DB_NAME=babe_manager
DB_USERNAME=docker
DB_PORT=5431
DB_PASSWORD=secret

当应用程序尝试连接到数据库时,出现以下错误。

getaddrinfo ENOTFOUND postgres

我也试过用这个。

 DB_DIALECT=postgres
    DB_HOST=localhost
    DB_NAME=babe_manager
    DB_USERNAME=docker
    DB_PORT=5431
    DB_PASSWORD=secret

这次我收到以下错误。

connect ECONNREFUSED 127.0.0.1:5431

我的应用服务器不在 docker-compose.yaml 范围内。我只是使用“nodemon server.js”启动它。我该如何解决?

您需要确保您的 Postgres 容器和您的节点在同一网络上。在它们驻留在公共网络中之后,您可以使用 docker 的 DNS 从节点应用程序解析数据库,在您的情况下,八个 postgres 或 test-db 作为主机名应该可以工作。有关 docker networks.

容器通信的更多信息