【发布时间】:2020-12-05 00:04:00
【问题描述】:
我目前正在使用 Rest API(Express、Nodejs)和 Postgresql 开发 Angular 应用程序。托管在我的本地计算机上时一切正常。测试后,我将图像移至 Ubuntu 服务器,以便可以将应用程序托管在外部端口上。我可以使用 https://serveripaddress:80 访问角度前端,但是在尝试登录时,api 没有连接到 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'的原因。关于如何解决这个问题的任何想法?蒂亚!
【问题讨论】:
-
我想你已经尝试过
docker-compose build以防 docker-compose.yml 中的值发生变化 -
@Nikolay - 是的,我做到了。
标签: node.js postgresql docker-compose