我在使用 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/