
[英]Node - Connect Node Express to Postgres Running In Docker Container
[英]Unable to connect to postgresql through node/express; postgresql and node running in docker container
客户端(React)、服务器(Node)和数据库(postgres)都在 docker 容器中运行。 我正在使用 npm package '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 运行查询来创建表
确保您使用的是 postgres npm 依赖项的最新版本之一。
您可以通过在 express 服务器文件夹中的 package.json 文件中的 depencecies 对象中添加"pg": "8.7.1"
来设置 pg npm 包版本 8.7.1。
可能有两个原因:
# docker-compose.yml version: '3.1' services: db: image: postgres restart: always container_name: 'Postgresql' ports: - "5432:5432" environment: POSTGRES_USER: admin POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres volumes: -./data:/var/lib/postgresql/data
这对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.