【问题标题】:Unable to connect to postgresql through node/express; postgresql and node running in docker container无法通过node/express连接postgresql;在 docker 容器中运行的 postgresql 和节点
【发布时间】:2021-09-26 02:41:40
【问题描述】:

客户端(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 运行查询来创建表

【问题讨论】:

  • 您似乎在问题中附加了两张图片;这些不是我可以运行或搜索以查找更多信息的东西。您能否将这些替换为您的 docker-compose.yml 的文本和源文件的文本,确保还包含错误消息的实际文本?
  • 更新了我的问题。我在控制台中没有收到任何错误,也没有创建任何表。

标签: docker express node-postgres


【解决方案1】:

确保您使用的是 postgres npm 依赖项的最新版本之一。

您可以通过在 express 服务器文件夹的 package.json 文件中的 depencecies 对象中添加 "pg": "8.7.1" 来设置 pg npm 包版本 8.7.1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2021-02-03
    • 2021-08-10
    • 2017-05-04
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多