我已经使用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)
答案 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。