Docker容器环境下NestJS无法连接MongoDB求助
Docker部署NestJS+MongoDB连接失败解决方案
问题根源:本地运行时,127.0.0.1指向你的本机,但在Docker容器里,127.0.0.1是容器自身的localhost,根本访问不到MongoDB容器。Docker Compose默认会给所有服务创建一个共享网络,同一网络里的服务可以直接用服务名作为主机名互相访问。
修复步骤
1. 修改数据库连接字符串
打开.env文件,把DB_CONNECTION_STRING里的127.0.0.1替换成Docker Compose中MongoDB的服务名mongodb:
PORT=3000 DB_CONNECTION_STRING=mongodb://mongodb:27017/db-name
2. 可选:确保MongoDB就绪后再启动NestJS
depends_on只保证MongoDB容器先启动,但不保证MongoDB服务完全就绪。如果还是出现连接超时,可以给MongoDB加健康检查,让NestJS等MongoDB就绪后再启动:
修改docker-compose.yml:
version: '3.8' services: mongodb: image: mongo:latest env_file: - .env ports: - 27017:27017 volumes: - mongodb_data_container:/data/db # 新增健康检查 healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 5s timeout: 5s retries: 5 api: build: . volumes: - .:/app - /app/node_modules ports: - ${PORT}:${PORT} command: npm run start:dev env_file: - .env depends_on: # 修改为等待MongoDB健康检查通过 mongodb: condition: service_healthy volumes: mongodb_data_container:
3. 重启容器
执行命令重启服务:
docker-compose down && docker-compose up --build
现在NestJS容器就能正常连接到MongoDB容器了。
内容的提问来源于stack exchange,提问作者Ahmed Mohsen
相关产品推荐
相关产品推荐

