【问题标题】:(Docker-Compose) UnhandledPromiseRejectionWarning when connecting node and postgres(Docker-Compose)连接节点和postgres时的UnhandledPromiseRejectionWarning
【发布时间】:2021-01-07 20:03:11
【问题描述】:

我正在尝试为 postgres 和节点连接容器。这是我的设置:

yml 文件:

version: "3"
services:
  postgresDB:
    image: postgres:alpine
    container_name: postgresDB
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=myDB
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=Thisisngo1995!

  express-server:
    build: ./
    environment:
      - DB_SERVER=postgresDB
    links:
      - postgresDB
    ports:
      - "3000:3000"

Dockerfile:

FROM node:12

WORKDIR /usr/src/app

COPY package.json ./

RUN npm install

COPY . . 

COPY ormconfig.docker.json ./ormconfig.json

EXPOSE 3000

CMD ["npm", "start"]

连接到 postgres:

let { Pool, Client } = require("pg");

let postgres = new Pool({
  host: "postgresDB",
  port: 5432,
  user: "postgres",
  password: "Thisisngo1995!",
  database: "myDB",
});

module.exports = postgres;

这是我处理端点的方式:

exports.postgres_get_controller = (req, resp) => {
  console.log("Reached Here");

  postgres
    .query('SELECT * FROM public."People"')
    .then((results) => {
      console.log(results);
      resp.send({ allData: results.rows });
    })
    .catch((e) => console.log(e));
};

每当我尝试触摸上面的端点时,我都会在容器中收到此错误:

原因是什么?

注意:只需更改“主机:本地主机”,我就可以在我的本地机器上运行一切(没有 docker)

【问题讨论】:

  • 如您所见,您的应用程序尝试连接到localhost,而您没有使用DB_HOST 环境变量。从 env 中获取它,而不是在 postgres 配置中放置 localhost。
  • @michalk 抱歉,我正在编辑此文档。我实际上是使用“postgresDB”作为主机(帖子已更新)。如果我在连接客户端时已经更改了这个,我需要在 DB_HOST 中添加什么?
  • 您的屏幕截图显示它仍在尝试连接到localhost
  • @michalk 我不确定我会从上面的代码库中添加/更改什么。我的主机已经指向名为“postgresDB”的服务。如何让它不连接到 127.0.0.1?如果我可以问,特别是我没有得到什么?这将非常有帮助,因为我已经坐了几天了。

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


【解决方案1】:

您的 postgres 数据库名称和用户名应该相同

【讨论】:

  • 我不确定这将如何解决我的问题。这只会影响数据库的登录凭据(当前在用户上:postgres,数据库名称:创建的 myDB。这些不应影响容器环境中应用程序和 postgres 之间的通信。
【解决方案2】:

您可以使用docker-compose-wait 确保以正确的顺序启动相互依赖的服务。

请参阅下文,了解如何在您的情况下使用它。

  1. 如下更新Dockerfile 的最后部分;
# ...
# this will be used to check if DB is up
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.7.3/wait ./wait
RUN chmod +x ./wait  


CMD ./wait && npm start
  1. 更新您的docker-compose.yml 的某些部分,如下所示:
express-server:
    build: ./
    environment:
      - DB_SERVER=postgresDB
      - WAIT_HOSTS=postgresDB:5432
      - WAIT_BEFORE_HOSTS=4
    links:
      - postgresDB
    depends_on:  
      - postgresDB
    ports:
      - "3000:3000"

【讨论】:

  • @albert-ngo 如果答案有帮助,请记得接受。见guidelines
猜你喜欢
  • 2022-01-01
  • 2016-12-27
  • 2022-01-01
  • 1970-01-01
  • 2021-06-08
  • 2017-08-06
  • 1970-01-01
相关资源
最近更新 更多