簡體   English   中英

無法在 docker-compose 場景中使用 npm pg 連接到 postgresql 容器

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

我正在使用npm pg"pg": "^7.18.2", "pg-native": "^3.0.0"我的 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配置、文檔和示例,我覺得一切正常。 還是少了點什么。 是在那里你可以找到整個東西。

更新:我在fibserver放置了一個簡單的斷路器:當他無法連接到數據庫時,它會等待一段時間並再次嘗試。 好吧, fibserver做了很多嘗試連接postgres服務,即使在 10 分鍾之后。 可能是我對npm pg庫的使用導致了這個問題? 如果有人想看,我也會更新主人。 謝謝你。

更新:我將 psql 安裝到 fibserver 容器中,並且成功連接到 postgres 服務,我認為這與我如何使用 pg 客戶端有關。 這是我之前應該嘗試過的。

終於有時間進一步討論這個問題了。 我在 fibserver 應用程序中卸載了兩個pg模塊並再次安裝 pg 為我提供了一個新版本的npm pg模塊(8.3.3),而沒有我可能錯誤安裝的本機部分。 單個 javascript pg庫可以完成這項工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM