首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用docker构建的NestJS应用程序无法访问同一个码头网络中的postgres数据库: ECONNREFUSED 127.0.0.1:5432

使用docker构建的NestJS应用程序无法访问同一个码头网络中的postgres数据库: ECONNREFUSED 127.0.0.1:5432
EN

Stack Overflow用户
提问于 2022-05-03 20:50:17
回答 2查看 996关注 0票数 0

我想在Docker的本地机器上运行我的应用程序。我不想优化我的对接应用程序的大小,也不想为现在的生产而构建它。

Docker成功地构建了我的后端-api应用程序和postgres。但是,我只能访问码头外的码头邮递员数据库,例如,在我的计算机上安装了dbeaver。另外,如果我用“”启动我的后端-api应用程序而没有Docker,我的应用程序也可以访问数据库而不会出现任何错误,并且还可以写入posgres db。只有当我用Docker构建后端-api并在Docker内部启动应用程序时,我才会得到这个错误。因为这只发生在Docker中,所以我认为我的Dockerfile中缺少一些重要的东西。

我的docker-compose.yml

代码语言:javascript
运行
复制
version: '3'

services:

  backend:
    build: .
    container_name: backend-api
    command: npm run start
    restart: unless-stopped
    ports:
      - 3000:3000
    volumes:
      - .:/usr/src/backend
    networks:
      - docker-network
    depends_on:
      - database

  database:
    image: postgres:latest
    container_name: backend-db
    ports:
      - 5432:5432
    volumes:
      - postgresdb/:/var/lib/postgresql/data/
    networks:
      - docker-network
    environment:
      POSTGRES_USER: devuser
      POSTGRES_PASSWORD: devpw
      POSTGRES_DB: devdb

volumes:
  postgresdb:

networks:
  docker-network:
    driver: bridge

我的文档

代码语言:javascript
运行
复制
FROM node:16.15.0-alpine

WORKDIR /usr/src/backend

COPY . .

RUN npm install

sudo坞-组合-构建输出:

代码语言:javascript
运行
复制
Starting backend-db ... done
Recreating backend-api ... done
Attaching to backend-db, backend-api
backend-db  | 
backend-db  | PostgreSQL Database directory appears to contain a database; Skipping initialization
backend-db  | 
backend-db  | 2022-05-03 20:35:46.065 UTC [1] LOG:  starting PostgreSQL 14.2 (Debian 14.2-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
backend-db  | 2022-05-03 20:35:46.066 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
backend-db  | 2022-05-03 20:35:46.066 UTC [1] LOG:  listening on IPv6 address "::", port 5432
backend-db  | 2022-05-03 20:35:46.067 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
backend-db  | 2022-05-03 20:35:46.071 UTC [26] LOG:  database system was shut down at 2022-05-03 20:35:02 UTC
backend-db  | 2022-05-03 20:35:46.077 UTC [1] LOG:  database system is ready to accept connections
backend-api | 
backend-api | > backend@0.0.1 start
backend-api | > nodemon
backend-api | 
backend-api | [nodemon] 2.0.15
backend-api | [nodemon] to restart at any time, enter `rs`
backend-api | [nodemon] watching path(s): src/**/*
backend-api | [nodemon] watching extensions: ts
backend-api | [nodemon] starting `IS_TS_NODE=true ts-node -r tsconfig-paths/register src/main.ts`
backend-api | [Nest] 30  - 05/03/2022, 8:35:50 PM     LOG [NestFactory] Starting Nest application...
backend-api | [Nest] 30  - 05/03/2022, 8:35:50 PM     LOG [InstanceLoader] TypeOrmModule dependencies initialized +73ms
backend-api | [Nest] 30  - 05/03/2022, 8:35:50 PM     LOG [InstanceLoader] ConfigHostModule dependencies initialized +1ms
backend-api | [Nest] 30  - 05/03/2022, 8:35:50 PM     LOG [InstanceLoader] AppModule dependencies initialized +0ms
backend-api | [Nest] 30  - 05/03/2022, 8:35:50 PM     LOG [InstanceLoader] ConfigModule dependencies initialized +1ms
backend-api | [Nest] 30  - 05/03/2022, 8:35:50 PM   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
backend-api | Error: connect ECONNREFUSED 127.0.0.1:5432
backend-api |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16)
backend-api | [Nest] 30  - 05/03/2022, 8:35:53 PM   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (2)...

我的ormconfig.ts

代码语言:javascript
运行
复制
import { ConnectionOptions } from 'typeorm';

const config: ConnectionOptions = {
  type: 'postgres',
  host: 'localhost',
  port: 5432,
  username: 'devuser',
  password: 'devpw',
  database: 'devdb',
  entities: [__dirname + '/**/*.entity{.ts,.js}'],
  synchronize: false,
  migrations: [__dirname + '/**/migrations/**/*{.ts,.js}'],
  cli: {
    migrationsDir: 'src/migrations',
  },
};

export default config;

请让我知道你希望我提供的其他信息。我对码头世界很陌生。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-03 20:55:28

当您运行一个码头容器时,localhost会产生container's本地主机,而不是您的机器,因此它不是正确使用的主机。在使用docker-compose时,将自动使用服务的名称作为host来创建对接者网络。

票数 2
EN

Stack Overflow用户

发布于 2022-07-06 09:07:26

遇到了同样的问题,这个docker-come.yml设置为我工作

代码语言:javascript
运行
复制
version: "3.8"
services:
  database:
    container_name: db
    image: postgres:14.2
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_HOST_AUTH_METHOD
  backend:
    container_name: api
    build:
      dockerfile: Dockerfile
      context: .
    restart: on-failure
    depends_on:
      - database
    ports:
      - "3000:3000"
    environment:
      - DATABASE_HOST=database
      - DATABASE_PORT=5432
      - DATABASE_USER=postgres
      - DATABASE_PASSWORD
      - DATABASE_NAME
      - DATABASE_SYNCHRONIZE
      - NODE_ENV

以下是两个主要的显著变化

  1. 将主机更改为database,这样码头网络将正确地将请求路由到数据库服务,就像在docker-compose.yml文件中定义的那样。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72105324

复制
相关文章

相似问题

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