首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker NodeJS应用程序无法连接postgres数据库

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

Stack Overflow用户
提问于 2022-01-11 11:17:58
回答 1查看 944关注 0票数 2

我对码头和码头写作都很陌生。我试图使用包含nodejs (Nest.js) api、postgres和pgadmin的docker来划分一些服务。如果没有API (nodejs)应用程序进行对接,我可以连接到对接者数据库容器,但是现在我已经对节点应用进行了文档化,它不再连接了,我也不知道为什么。我设置的方式有什么问题吗?

这是我的码头-撰写文件

代码语言:javascript
运行
复制
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,它成功地构建,在我看到的日志中,应用程序试图连接到数据库,但是它不能(没有特定的错误)只是找不到db。

代码语言:javascript
运行
复制
# 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"]

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

  1. .env
  2. docker.env

如前所述,当我从docker中删除"nftapi“服务并使用一个简单的postgres运行nodejs时,它将连接到postgres容器。

代码语言:javascript
运行
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 12:40:45

当使用带有docker的网络时,您应该使用服务的名称作为您的主机名。

因此,在您的示例中,主机名应该是postgres而不是localhost

您可以在这里阅读更多关于:https://docs.docker.com/compose/networking/的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70665871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档