无法在 docker-compose 场景中使用 npm pg 连接到 postgresql 容器

Cannot connect to postgresql container using npm pg in a docker-compose scenario

我正在使用 npm pg(我的 package.json 中的 "pg": "^7.18.2", "pg-native": "^3.0.0"),我是新手,将我的新手 node 应用程序连接到 postgresql 数据库。我使用 docker-compose 使用此配置启动所有内容:

version: '3'
services:
  postgres:
    image: 'postgres:latest'
    environment:
      - POSTGRES_USER=postgres_user
      - POSTGRES_PASSWORD=postgres_password
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres_user"]
      interval: 10s
      timeout: 5s
      retries: 5
  redis:
    image: 'redis:latest'
  nginx:
    restart: always
    build:
      dockerfile: Dockerfile.dev
      context: ./nginx
    ports:
      - '8000:80'
    depends_on:
      - fibclient
      - fibserver
  fibserver:
    build:
      dockerfile: Dockerfile.dev
      context: ./server
    volumes:
      - './server:/app'
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - PGUSER=postgres_user
      - PGPASSWORD=postgres_password
      - PGHOST=postgres
      - PGPORT=5432
      - PGDATABASE=postgres
    depends_on:
      - redis
      - postgres
      - fibworker
    ports:
      - '9229:9229'
  fibclient:
    build:
      dockerfile: Dockerfile.dev
      context: ./client
    volumes:
      - './client:/app'
  fibworker:
    build:
      dockerfile: Dockerfile.dev
      context: ./fibworker
    volumes:
      - './fibworker:/app'
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
    ports:
      - '9230:9229'
    depends_on:
      - redis

正如您想象的那样,fibserver 是试图连接到托管 postgresql 数据库的 postgres 服务的后端应用程序。遗憾的是,fibserver 应用程序在连接到数据库时总是出现此错误:

fibserver_1  | Error: Connection terminated due to connection timeout
fibserver_1  |     at Connection.<anonymous> (/app/node_modules/pg/lib/client.js:255:9)
fibserver_1  |     at Object.onceWrapper (events.js:420:28)
fibserver_1  |     at Connection.emit (events.js:314:20)
fibserver_1  |     at Socket.<anonymous> (/app/node_modules/pg/lib/connection.js:78:10)
fibserver_1  |     at Socket.emit (events.js:314:20)
fibserver_1  |     at emitCloseNT (net.js:1657:8)
fibserver_1  |     at processTicksAndRejections (internal/process/task_queues.js:79:21)
fibserver_1  |     at runNextTicks (internal/process/task_queues.js:62:3)
fibserver_1  |     at listOnTimeout (internal/timers.js:520:9)
fibserver_1  |     at processTimers (internal/timers.js:494:7)

我仔细检查了我的 docker-compose 文件,如果服务相互了解(fibserver 可以 ping postgres),npm pg 配置,文档和示例,在我看来一切都很好。仍然缺少一些东西。 This 是您可以找到所有内容的地方。

更新: 我在 fibserver 中放置了一个简单的断路器:当他无法连接到数据库时,它会等待一段时间并重试。嗯,fibserver 做了很多尝试来连接 do postgres 服务,甚至在 10 分钟后。可能是我对 npm pg 库的使用导致了这个问题吗?如果有人想看,我也会更新主人。谢谢。

更新: 我将 psql 安装到 fibserver 容器中,并成功连接到 postgres 服务,我认为这是我如何使用 pg 客户端的问题。这是我之前应该尝试过的。

终于有时间进一步讨论这个问题了。我在我的 fibserver 应用程序中卸载了两个 pg 模块并再次安装 pg 为我提供了一个新版本的 npm pg 模块 (8.3.3) 而没有我可能安装的本机部分错误。单个 javascript pg 库完成工作。