MongooseModule:无法连接到数据库。在带有 Mongo 的 Dockerized Nestjs 应用程序上

Jes*_* V. 3 mongoose mongodb docker docker-compose nestjs

我正在尝试使用 docker-compose 启动一个react-nestjs-mongo db应用程序,但由于某种原因它似乎不起作用。docker-compose --build输出显示如下:

服务器 | [Nest] 32 - 06/06/2021, 3:10:25 AM [MongooseModule] 无法连接到数据库。重试 (7)... +33006ms

数据库| {“t”:{“$date”:“2021-06-06T03:10:27.406+00:00”},“s”:“I”,“c”:“存储”,“id”:22430,
"ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1622949027:406819][1:0x7f9ae2c3b700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] 保存检查点快照分钟: 7、快照最大值:7 快照计数:0、最早的时间戳:(0, 0) 、元检查点时间戳:(0, 0)"}}

这是我的 docker-compose:

version: "3.5"

services:   client:
    container_name: client
    build: ./client
    ports:
      - 3000:3000
    depends_on:
      - server

  server:
    container_name: server
    build: ./server
    ports:
      - 8000:8000
    depends_on:
      - mongodb
    links:
      - mongodb

  mongodb:
    container_name: database
    image: mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
Run Code Online (Sandbox Code Playgroud)

我的 app.modules.ts 文件如下所示:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose';

@Module({   
imports: [
    MongooseModule.forRoot('mongodb://localhost:27017/nestjs', {
      useNewUrlParser: true,
    }),   
],   
controllers: [AppController],   
providers: [AppService],
 })  
class AppModule {}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么这不起作用吗?

小智 9

您正在使用 docker-compose 。因此,您没有连接“localhost”,但它应该是您在 docker-compose 文件中定义的“服务”的地址。

您应该使用而不是 'mongodb://localhost:27017/nestjs' (在您的情况下,您在 docker-compose 中定义的服务名称是 mongodb 。您应该使用 'mongodb://mongodb:27017/nestjs'