簡體   English   中英

Nodejs 無法連接到 Postgresdb 容器

[英]Nodejs cannot connect to Postgresdb container

我目前正在使用 Rest API (Express,Nodejs)和 ZC26C2311D9E6ACBCDFFE26 開發 angular 應用程序。 在我的本地計算機上托管時一切正常。 測試后,我將圖像移至 Ubuntu 服務器,以便應用程序可以托管在外部端口上。 I am able to access the angular frontend using the https://serveripaddress:80 but when trying to login, the api is not connecting to Postgresql. 我收到一條錯誤消息:ERR_CONNECTION_REFUSED。 這是我的 docker-compose 文件:

version: '3.0' 

services:

  db:
    image: postgres:9.6-alpine
    environment:
      POSTGRES_DB: myDatabase
      POSTGRES_PASSWORD: myPwd
      POSTGRES_PORT: 5432
      POSTGRES_HOST: db

    ports:
    - 5434:5432
    restart: always
    volumes:
    - ./postgres-data:/var/lib/postgresql/data

  backend: # name of the second service
   image: myid/nodeapi
   ports:
   - 3000:3000

   environment:
    POSTGRES_DB: myDatabase
    POSTGRES_PASSWORD: myPwd
    POSTGRES_PORT: 5432
    POSTGRES_HOST: db
   depends_on:
   - db
   command: bash -c "sleep 20 && node server.js"

  myapp-portal:
    image: myId/angular-app
    ports:
    - "80:80"
    depends_on:
    - backend

volumes:
      postgres-data:

連接數據庫的代碼:

const { Client } = require('pg')


const client = new Client({
  database: process.env.POSTGRES_DB,
  user: 'postgres',
  password: process.env.POSTGRES_PASSWORD,
  host: process.env.POSTGRES_HOST,
  port: process.env.POSTGRES_PORT

})

client.connect()
.then(
  () => {
      console.log("db connected");
  })

以及后端的 docker-compose 日志:

后端_1 | 數據庫已連接

當我執行到數據庫 docker 容器並連接到 psql 時,我看到我的數據庫已創建(手動使用 pg_dump)包含所有表和數據。 我的猜測是 node.js 正在連接到安裝時創建的默認 Postgres 數據庫。 我在本地機器上遇到了同樣的問題,但我通過在 pgAdmin4 中創建一個新的服務器組並在端口 5434 上創建一個新的數據庫來解決它。我不想在服務器上這樣做,因為它違背了 docker 概念的目的。 另一個想法可能是 node.js 甚至在數據庫啟動之前就嘗試連接到數據庫。 這就是我添加在我的本地機器上工作的行'sleep 20'的原因。 關於如何解決這個問題的任何想法? 蒂亞!

如果您想等待主機和 TCP 端口的可用性,您可以使用此腳本https://github.com/vishnubob/wait-for-it在您的 Z05B6053C41A2130AFD6FC3B158BDA4E 文件中復制此文件並更改容器模式

RUN chmod +x wait-for-it.sh

然后在您的 docker 撰寫中,在您要等待的服務上運行此腳本

entrypoint: bash -c "./wait-for-it.sh --timeout=0 service_name:service_port && node server.js"

暫無
暫無

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

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