我有一个非常简单的node.js
应用程序,它使用Typeorm
与postgres数据库进行通信。如果我在主机上或在两个单独的Docker容器中运行它,则可以正常运行。
我创建一个启动Postgres和节点应用程序的docker-compose文件时发生了问题。Typeorm无法连接到Postgres,因为它启动得更快。
这是连接到数据库的代码的一部分
createConnection({
type: "postgres",
host: "0.0.0.0",
port: 5432,
username: "***",
password: "***",
database: "***",
entities: [
***
],
synchronize: true,
logging: false
}).then(async connection => {...
错误代码为
Error: connect ECONNREFUSED 127.0.0.1:5432
web_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1056:14) {
web_1 | errno: 'ECONNREFUSED',
web_1 | code: 'ECONNREFUSED',
web_1 | syscall: 'connect',
web_1 | address: '127.0.0.1',
web_1 | port: 5432
web_1 | }
有没有办法重试连接?
答案 0 :(得分:0)
事实证明,要从docker compose连接Postgres DB,您不需要连接到localhost,而是要连接到docker-compose.yaml文件中提供的服务名称。例如,这是我的docker-compose.yaml文件
version: "3"
services:
db:
image: postgres
restart: always
environment:
POSTGRES_USER: '***'
POSTGRES_PASSWORD: '***'
POSTGRES_DB: '***'
ports:
- 5432:5432
expose:
- 5432
web:
build: .
ports:
- 3000:3000
depends_on:
- db
对于用于typeorm连接到Postgres的配置,我需要指定这样的连接属性
{
type: "postgres",
host: "",
port: 5432,
username: "***",
password: "***",
database: "***",
entities: [
***
],
synchronize: true,
logging: false
}