Typeorm повторить попытку подключения при сбое - PullRequest
0 голосов
/ 06 июля 2019

У меня очень простое приложение node.js, которое связывается с базой данных postgres с помощью Typeorm. Он отлично работает, если я запускаю его на своем хост-компьютере или в двух отдельных контейнерах докера. проблема возникла, когда я создал файл docker-compose, который запускает Postgres и приложение узла. 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 голосов
/ 07 июля 2019

получается, что для подключения БД Postgres из docker compose вам нужно подключиться не к 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
}
...