Typeorm重试连接失败

时间:2019-07-06 20:28:31

标签: node.js postgresql docker-compose typeorm

我有一个非常简单的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  | }

有没有办法重试连接?

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
}