Docker容器中Nest.js的TypeORM无法与MongoDB认证连接问题
问题:Docker容器内Nest.js的TypeORM无法与MongoDB完成认证
示例代码
docker-compose.yml
version: '3' services: mongodb: container_name: rosie-mongodb-1 image: mongo ports: - "27017:27017" environment: MONGO_INITDB_ROOT_USERNAME: ###REDACTED FOR SECURITY### MONGO_INITDB_ROOT_PASSWORD: ###REDACTED FOR SECURITY### MONGODB_DATABASE: "rosie" networks: - rosie-net nest-backend: build: context: ./backend dockerfile: Dockerfile ports: - "4000:4000" volumes: - ./backend:/usr/src/app networks: - rosie-net # Rest of File
app.module.ts
import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { DataSource } from 'typeorm'; import { EntitiesModule } from './entities/entities.module'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mongodb', url: 'mongodb://###REDACTED FOR SECURITY###:###REDACTED FOR SECURITY###@mongodb:27017/rosie', synchronize: true, }), EntitiesModule, ], }) export class AppModule { constructor(private dataSource: DataSource) {} }
Mongo容器中的认证错误
Unable to connect to the database. Retrying (1)... 2023-08-07 19:36:55 MongoServerError: Authentication failed. 2023-08-07 19:36:55 at Connection.onMessage (/usr/src/app/node_modules/mongodb/src/cmap/connection.ts:413:18) 2023-08-07 19:36:55 at MessageStream.<anonymous> (/usr/src/app/node_modules/mongodb/src/cmap/connection.ts:243:56) 2023-08-07 19:36:55 at MessageStream.emit (node:events:513:28) 2023-08-07 19:36:55 at processIncomingData (/usr/src/app/node_modules/mongodb/src/cmap/message_stream.ts:193:12) 2023-08-07 19:36:55 at MessageStream._write (/usr/src/app/node_modules/mongodb/src/cmap/message_stream.ts:74:5) 2023-08-07 19:36:55 at writeOrBuffer (node:internal/streams/writable:392:12) 2023-08-07 19:36:55 at _write (node:internal/streams/writable:333:10) 2023-08-07 19:36:55 at MessageStream.Writable.write (node:internal/streams/writable:337:10) 2023-08-07 19:36:55 at Socket.ondata (node:internal/streams/readable:766:22) 2023-08-07 19:36:55 at Socket.emit (node:events:513:28)
已尝试的操作
- 改用单独配置参数设置认证信息:
imports: [ TypeOrmModule.forRoot({ type: 'mongodb', host: '###REDACTED###', port: 27017, username: '###REDACTED###', password: '###REDACTED###', database: 'rosie', synchronize: true, }), EntitiesModule, ],
- 使用URI字符串配置连接
- 通过MongoDB Compass测试认证,可正常连接
- 多次重建并重启容器确保配置生效
内容的提问来源于stack exchange,提问作者ChaosWraith
相关产品推荐
相关产品推荐

