如何在与NodeJ组成的docker内部连接到postgres?

时间:2018-11-20 08:55:54

标签: node.js postgresql docker express

我已经使用Docker在Cloud Server中安装了Mainflux。 Postgres DB也是      在Docker容器中运行。我有一种情况要通过Node.Js(以编程方式)连接到PostgresDB。我发现“ pg”模块连接到云      Postgres数据库。但是,无法连接到正在运行的Postgres      Docker容器。我在下面粘贴了我的代码,请让我知道连接“ 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上[作为完成](net.js:1191:14)         (节点:8084)UnhandledPromiseRejectionWarning:未处理的承诺被拒绝。         该错误是由抛出异步函数引起的         没有障碍或拒绝没有处理的承诺         .catch()(拒绝ID:1)         (节点:8084)[DEP0018] DeprecationWarning:未处理的Promise拒绝是           不推荐使用。将来,未处理的承诺拒绝会           使用以下命令终止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)            在套接字。              (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 [作为_onclose](net.js:561:12)

1 个答案:

答案 0 :(得分:1)

如果使用此处https://github.com/mainflux/mainflux/blob/master/docker/docker-compose.yml提供的docker-compose配置启动Mainflux,则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 docker compose在2个容器中有2个PostgreSQL数据库:Things-db和users-db。