Docker NodeJS 应用程序无法连接到 postgres 数据库

Docker NodeJS app cant connect to postgres database

我对 docker 和 docker-compose 还很陌生。我尝试使用 docker 启动一些服务,其中包含一个 nodejs (Nest.js) api、一个 postgres 数据库和 pgadmin。没有 API (nodejs) 应用程序 dockerized 我可以连接到 docker 数据库容器,但现在我也 dockerized 节点应用程序,它不是连接了,我不知道为什么。我设置的方式有什么问题吗?

这是我的 docker-compose 文件

version: "3"
services:
  nftapi:
    env_file:
      - .env
    build:
      context: .
    ports:
      - '5000:5000'
    depends_on: 
      - postgres
    volumes: 
      - .:/app
      - /app/node_modules
    networks:
      - postgres
      
  postgres:
    container_name: postgres
    image: postgres:latest
    ports:
    - "5432:5432"
    volumes:
    - /data/postgres:/data/postgres
    env_file:
    - docker.env
    networks:
    - postgres
 
  pgadmin:
    links:
    - postgres:postgres
    container_name: pgadmin
    image: dpage/pgadmin4
    ports:
    - "8080:80"
    volumes:
    - /data/pgadmin:/root/.pgadmin
    env_file:
    - docker.env
    networks:
    - postgres
 
networks:
  postgres:
    driver: bridge

这是成功构建的 nodejs 应用程序 Dockerfile,在日志中我看到该应用程序正在尝试连接到数据库,但它不能(没有特定错误)只是找不到数据库。

# Image source
FROM node:14-alpine

# Docker working directory
WORKDIR /app

# Copying file into APP directory of docker
COPY ./package.json /app/

RUN apk update && \
    apk add git
# Then install the NPM module
RUN yarn install

# Copy current directory to APP folder
COPY . /app/

EXPOSE 5000
CMD ["npm", "run", "start:dev"]

我的项目根目录中有 2 个 env 文件。

  1. .env
  2. docker.env

如上所述,当我从 docker 和 运行 中删除“nftapi”服务时,nodejs 通过简单的 npm 启动启动,它正在连接到 postgres 容器。

TypeOrmModule.forRoot({
      type: 'postgres',
      host: process.env.POSTGRES_HOST,
      port: Number(process.env.POSTGRES_PORT),
      username: process.env.POSTGRES_USER,
      password: process.env.POSTGRES_PASSWORD,
      database: process.env.POSTGRES_DB,
      synchronize:true,
      entities: ['dist/**/*.entity{.ts,.js}'],
    }),

typeorm 模块中使用的 .env 文件中的主机是 localhost

使用 docker-compose 网络时,您应该使用服务名称作为主机名。

所以在你的情况下主机名应该是 postgres 而不是 localhost

您可以在此处阅读更多信息: https://docs.docker.com/compose/networking/