【问题标题】:Cant connect Postgres with NodeJS (Docker Compose) [duplicate]无法将 Postgres 与 NodeJS(Docker Compose)连接 [重复]
【发布时间】:2020-05-10 09:35:36
【问题描述】:

我有下一个 docker-compose 文件:

version: "3"

services:
  proxy:
    build:
      context: ./client
      dockerfile: proxy.Dockerfile
    ports:
      - "80:80"
  server:
    build:
      context: .
      dockerfile: server.Dockerfile
    ports:
      - "3000:3000"
    depends_on: [db]
  db:
    image: postgres
    environment:
      POSTGRES_USER: lautidamo
      POSTGRES_PASSWORD: la12papa
      POSTGRES_DB: product-manager
    ports:
      - "5432:5432"

我有这个 database.ts:

import { Sequelize } from "sequelize";

export const sequelize = new Sequelize(
  "product-manager",
  "lautidamo",
  "la12papa",
  {
    dialect: "postgres",
    host: "localhost",
    port: 5432
  }
);

代理和服务器服务工作正常。但是当我向必须连接到数据库的路由发出请求时,出现此错误 connect ECONNREFUSED 127.0.0.1:5432。

【问题讨论】:

    标签: node.js postgresql docker docker-compose sequelize.js


    【解决方案1】:

    不要连接到localhost。连接到您的数据库服务的名称。在您的情况下,这将是 db

    看起来像这样:

    export const sequelize = new Sequelize(
      "product-manager",
      "lautidamo",
      "la12papa",
      {
        dialect: "postgres",
        host: "db",
        port: 5432
      }
    );
    

    编辑:另外,几点...

    1. 除非您想从外部连接到它,否则您的db 服务中不需要该ports 选项。也就是说,如果您想使用组合外部的东西(如 dbeaver 或某种数据库管理工具)连接到数据库容器,您只需要在那里。如果您只是将其与组合中的其他容器(例如您的应用)连接起来,则可以将其省略。

    2. 我认为您可以将这些数据库凭据放在您的 docker-compose.yml 旁边的 .env 文件中。如果您将它们添加到您的 server 服务定义中 - 然后您可以使用 process.env.POSTGRES_USER 等访问这些值。:)

    【讨论】:

    • 感谢您的回复!等我回家我会试试的。在第 2 点,我试图在进入环境变量之前先连接硬代码,因为我已经疯狂地尝试连接
    • 没问题。是的,首先这样做是有意义的:)
    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多