如何解决无法通过 node/express 连接到 postgresql; postgresql 和节点在 docker 容器中运行
客户端(React)、服务器(Node)和数据库(postgres)都在 docker 容器中运行。我正在使用 npm 包 'pg' 创建池并通过 express 连接到 postgres 数据库。但是,我无法连接。无法运行任何查询。
但是我可以通过本地机器中的 pgAdmin 连接相同的 postgres 图像。通过连接到端口 5435。
我是 docker 的新手,我什么也想不通。 帮助。
docker-compose.yml
version: '3'
services:
postgres:
image: postgres:latest
environment:
- POSTGRES_PASSWORD=postgres_password
ports:
- '5435:5432'
web-app:
build:
context: ./client
dockerfile: Dockerfile.dev
volumes:
- /app/node_modules
- ./client:/app
ports:
- '4001:3000'
restart: on-failure
to-do-api:
build:
context: ./server
dockerfile: Dockerfile.dev
ports:
- '5001:3001'
restart: on-failure
volumes:
- /app/node_modules
- ./server:/app
environment:
- PGUSER=postgres
- PGHOST=postgres
- PGDATABASE=postgres
- PGPASSWORD=postgres_password
- PGPORT=5432
index.js
require('dotenv').config();
// Express App Setup
const express = require('express');
const http = require('http');
const bodyParser = require('body-parser');
const cors = require('cors');
const uuid = require('uuid/v4');
// Config
const config = require('./config');
// Initialization
const app = express();
app.use(cors());
app.use(bodyParser.json());
// Postgres client
const { Pool,Client } = require('pg');
console.log('config.pgUser',config.pgUser);
const pool = new Pool({
user: config.pgUser,host: config.pgHost,database: config.pgDatabase,password: config.pgPassword,port: config.pgPort,max : 20,});
async function testConnection() {
try {
return await pool.query("DROP TABLE IF EXISTS task"+
"CREATE TABLE task (id serial PRIMARY KEY,name VARCHAR(50),lastname VARCHAR(50));");
} catch (e) {
console.log(e)
}
async function main() {
await testConnection();
}
main()
.then (() => {
console.error('Done');
process.exit(0);
})
.catch((err) => {
console.error('Error: %s',err);
console.error('Error: %s',err.stack);
process.exit(1);
});
main();
pool.on('error',() => console.log('Lost Postgres connection'));
// Server
const port = process.env.PORT || 3001;
const server = http.createServer(app);
server.listen(port,() => console.log(`Server running on port ${port}`));
注意:我正在尝试连接到在 docker 容器中运行的 postgres,并通过使用节点 postgresql 运行查询来创建一个表
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。