Как подключиться к postgres внутри docker compose с NodeJs? - PullRequest
0 голосов
/ 20 ноября 2018

Я установил Mainflux в Cloud Server, используя Docker.Postgres DB также работает в Docker Container.У меня есть ситуация для подключения к PostgresDB с Node.Js (программно).Я нашел модуль "pg" для подключения к базе данных Cloud Postgres.Но я не могу подключиться к Postgres, работающему на Docker Container.Я вставил свой код ниже, пожалуйста, дайте мне знать сценарий подключения «Docker Postgres».

  const pg = require('pg');
  const conStringPri = postgres://mainflux:mainflux@MYIP/mainflux-things-db;
  const Client = pg.Client;
  const client = new Client({connectionString: conStringPri});
  client.connect();
  client.query(CREATE DATABASE DB_Name)
  .then(() => client.end());

Получение ошибки, как показано ниже:

узел: 8084) UnhandledPromiseRejectionWarning: Ошибка: подключить ECONNREFUSED MYIP: 5432 в TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1191: 14) (узел: 8084) UnhandledPromiseRejectionWarning: необработанное отклонение обещания.Эта ошибка возникла либо в результате выброса внутри асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch () (идентификатор отклонения: 1) (узел: 8084) [DEP0018] DeprecationWarning: Необработанное отклонение обещания не рекомендуется,В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.(узел: 8084) UnhandledPromiseRejectionWarning: Ошибка: соединение неожиданно прервано в Connection.con.once (D: \ postgres_Nodejs \ node_modules \ pg \ lib \ client.js: 200: 9) в Object.onceWrapper (events.js: 313: 30) в emitNone (events.js: 106: 13) в Connection.emit (events.js: 208: 7) в Socket.(D: \ postgres_Nodejs \ node_modules \ pg \ lib \ connection.js: 76: 10) в emitOne (events.js: 116: 13) в Socket.emit (events.js: 211: 7) в TCP._handle.close[as _onclose] (net.js: 561: 12)

1 Ответ

0 голосов
/ 20 ноября 2018

Если вы запустили Mainflux, используя конфигурацию docker-compose, указанную здесь https://github.com/mainflux/mainflux/blob/master/docker/docker-compose.yml, то ваш контейнер PostgreSQL не имеет порта, доступного для хоста.Чтобы иметь возможность подключиться к базе данных, вам нужно предоставить этот порт.

Вот пример того, как будет выглядеть часть docker-compose, с контейнером things-db, имеющим порт 5432 (по умолчаниюПорт PostgreSQL) выставлен

   things-db:                                                                                                                                                                
    image: postgres:10.2-alpine                                                                                                                                             
    container_name: mainflux-things-db                                                                                                                                      
    restart: on-failure                                                                                                                                                     
    environment:                                                                                                                                                            
      POSTGRES_USER: mainflux                                                                                                                                               
      POSTGRES_PASSWORD: mainflux                                                                                                                                           
      POSTGRES_DB: things                                                                                                                                                   
    networks:                                                                                                                                                               
      - mainflux-base-net                                                                                                                                                   
    ports:                                                                                                                                                                  
      - 5432:5432  

Так что вам нужно будет изменить ваш docker-compose.yml.Обратите внимание, что докер Mainflux compose имеет 2 базы данных PostgreSQL в 2 контейнерах: things-db и users-db.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...