Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js (Docker Compose)连接节点和postgres时未处理的Promisejection警告_Node.js_Postgresql_Docker_Docker Compose_Dockerfile - Fatal编程技术网

Node.js (Docker Compose)连接节点和postgres时未处理的Promisejection警告

Node.js (Docker Compose)连接节点和postgres时未处理的Promisejection警告,node.js,postgresql,docker,docker-compose,dockerfile,Node.js,Postgresql,Docker,Docker Compose,Dockerfile,我正在尝试连接postgres和node的容器。以下是我的设置: yml文件: version: "3" services: postgresDB: image: postgres:alpine container_name: postgresDB ports: - "5432:5432" environment: - POSTGRES_DB=myDB - POSTGRES_USER=

我正在尝试连接postgres和node的容器。以下是我的设置:

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)

您的postgres数据库名称和用户名应该相同,您可以使用它们来确保以正确的顺序启动相互依赖的服务

请参见下文,了解如何将其用于您的案例

  • 更新
    Dockerfile
    的最后一部分,如下所示
  • 更新docker compose.yml的某些部分,如下所示:

  • 如您所见,您的应用程序尝试连接到
    localhost
    ,而您没有使用
    DB\u HOST
    环境变量。在postgres配置中,从env and place而不是localhost获取它。@michalk很抱歉,我正在编辑此文档。我实际上是在使用“postgresDB”作为主机(帖子已经更新)。如果我在连接客户端时已经更改了DB_主机,那么我需要在DB_主机中添加什么?您的屏幕截图显示,它仍然尝试连接到
    localhost
    @michalk。我不确定我将在上面的代码库中添加/更改什么。我的主机已经指向名为“postgresDB”的服务。如何使其不连接到127.0.0.1?如果我可以问的话,具体在哪里,我没有得到什么?这将是非常有帮助的,因为我已经坐在这几天了。我不确定这将如何解决我的问题。这只会影响数据库的登录凭据(当前在用户:postgres和创建的数据库名:myDB上)。这些不会影响应用程序和容器环境中postgres之间的通信。@如果答案有帮助,请记住接受它。请参阅
    # ...
    # 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
    
    express-server:
        build: ./
        environment:
          - DB_SERVER=postgresDB
          - WAIT_HOSTS=postgresDB:5432
          - WAIT_BEFORE_HOSTS=4
        links:
          - postgresDB
        depends_on:  
          - postgresDB
        ports:
          - "3000:3000"