[英]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.