javascript - 无法连接到 dockerized postgresql 服务器

标签 javascript node.js postgresql api docker

我在使用 Node.js 连接到我的 postgresql 数据库时遇到问题 像这样运行 dockerized postgresql 服务器( https://docs.docker.com/engine/examples/postgresql_service/ )。可以连接pgadmin,但无法连接node。在这个端口上没有看到任何进程。我看到什么错误:

MacBook-Pro-Maxim:nodejs lucio$ docker logs 5cc44d01bf4ada729e5f1c71157e4eba5cb6fa9fd40122f384b423fbd1ae13a7
2019-12-28T12:38:53: PM2 log: Launching in no daemon mode
2019-12-28T12:38:53: PM2 log: App [index:0] starting in -fork mode-
2019-12-28T12:38:53: PM2 log: App [index:0] online
{ Error: connect ECONNREFUSED 127.0.0.1:32775
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
  errno: 'ECONNREFUSED',

  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 32775 }

数据库.js 这是我的 DataBase 类的简单示例。只是用于连接和简单查询请求方法的参数的构造函数。

const {
  Pool,
  Client
} = require('pg')
const sqlQueryGenerator = require('sql-query-generator')
const sqlGenerator = require('sql')
sqlGenerator.setDialect('postgres')
sqlQueryGenerator.use('postgres')

class DataBase {
  constructor(params) {
    this.base = new Pool(params)
  }
  query(text) {
    return new Promise((resolve, reject) => {
      this.base.query(text, (err, res) => {
        if (err) reject(err)
        resolve(res)
      })
    })
  }
}

module.exports = DataBase

在我的 api.js 文件中使用此模块

require('dotenv').config({ path: './.env' })
const DataBase = require('./database')
const db = new DataBase({
   user     : process.env.USER,
   host     : process.env.HOST,
   database : process.env.TABLE,
   password : process.env.PASSWORD,
   port     : process.env.PORT,
})

这是我的 .env 文件

HOST = localhost
USER = docker
TABLE = docker
PASSWORD = docker
PORT = 32775

在使用 node.js api 运行容器之前,我检查 postgresql docker 容器的实际端口。 如何解决我的问题?谢谢反馈

最佳答案

您无法使用localhost连接到DB容器,这里localhost表示Nodejs容器而不是DB容器。

{ Error: connect ECONNREFUSED 127.0.0.1:32775

在nodejs容器中寻找数据库的连接。

要连接数据库容器,您有两种选择。

  • DB和nodejs使用公共(public)网络,并使用服务名称连接数据库。
HOST = db_container_name
USER = docker
TABLE = docker
PASSWORD = docker
PORT = 5432
  • 使用主机 IP 进行数据库连接。
HOST = HOST_IP
USER = docker
TABLE = docker
PASSWORD = docker
PORT = 32775

或者更好地使用 docker-compose 来为您处理网络,您可以使用容器的名称引用任何容器进行连接。

关于javascript - 无法连接到 dockerized postgresql 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59511076/

相关文章:

javascript - 绑定(bind)函数的奇怪行为

postgresql - 在单个列中创建包含多个单词的表

python - 将参数传递给 DB .execute for WHERE IN... INT list

javascript - 在 iFrame 中显示用户上一页

node.js - 呈现给 node.js 与浏览器的不同证书

javascript - 创建文件对象或 Blob

node.js - node.js 到底是做什么用的?

postgresql - QSqlQuery Postgres 多选

javascript - Highcharts - 强制显示 x 轴中的类别,即使没有数据

javascript - Html5 中的 3 层 Canvas