簡體   English   中英

Docker compose 在 MongoDB 和 NodeJs 中出現錯誤 ECONNREFUSED 127.0.0.1:27018

[英]Docker compose getting error ECONNREFUSED 127.0.0.1:27018 with MongoDB and NodeJs

我正在嘗試通過在 Windows 11 主機中使用 Docker Compose 為我的 NestJS + TypeORM + MongoDB 環境設置一些容器,但我收到 ECONNREFUSED 錯誤:

nestjs-docker-api-1    | [Nest] 1  - 07/23/2022, 8:45:32 AM   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
nestjs-docker-api-1    | MongoServerSelectionError: connect ECONNREFUSED 127.0.0.1:27018
nestjs-docker-api-1    |     at Timeout._onTimeout (/usr/src/app/node_modules/mongodb/lib/sdam/topology.js:293:38)
nestjs-docker-api-1    |     at listOnTimeout (internal/timers.js:554:17)
nestjs-docker-api-1    |     at processTimers (internal/timers.js:497:7)

我創建了以下Dockerfile來配置 NestJS API 容器:

FROM node:12

# Create app directory
WORKDIR /usr/src/app

# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./

# Install app dependencies
RUN npm install 

# Bundle app source
COPY . .


EXPOSE 8080

# Creates a "dist" folder with the production build
RUN npm run build

# Start the server using the production build
CMD [ "node", "dist/main.js" ]

然后我使用以下docker-compose.yml從 Docker Compose 引用它:

version: "3.9"
services:
    mongo:
        image: mongo
        ports:
            - "27018:27017"
        restart: always
        environment: 
              ME_CONFIG_MONGODB_ADMINUSERNAME: root
              ME_CONFIG_MONGODB_ADMINPASSWORD: example 
    api:
        image: image_name
        build: . 
        depends_on: 
            - mongo
        environment: 
            NODE_ENV: development
            PORT: 3000
            USERNAME : root,
            PASSWORD : example
        ports:
            - "8000:3000"

最后,我將 TypeORM 配置設置為與 Docker Compose 文件匹配:

@Module({
  imports: [ TypeOrmModule.forRoot({
    type: 'mongodb',
    host: 'localhost',
    port: 27018,
    database: 'admin',
    entities: [],
    synchronize: true,
  })],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

我嘗試了很多,但代碼不起作用。有幫助嗎?

來自文檔

默認情況下,Compose 會為您的應用程序設置一個網絡。

您必須使用這里的服務名稱mongo通過 compose 而不是localhost創建的網絡連接到它。

或者,如果您想直接連接到localhsot ,您可以將network_mode: "host"添加到您的 docker-compose 文件中。

更多關於network_mode在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM