You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下Spring Boot微服务无法连接MongoDB求助

Docker容器中Spring Boot服务无法连接MongoDB的解决方案

问题根源

容器内的localhost指向容器自身的回环地址,而非宿主机或其他Docker容器。你的userinfoservice配置中用localhost:27017连接MongoDB,在容器内实际是尝试访问自己的27017端口,自然连接失败。此外,服务间调用的localhost配置也存在同样问题。

修复步骤

1. 修改MongoDB连接地址

将所有服务的MongoDB连接URI中的localhost替换为Docker Compose中mongo服务的名称mongo:

# docker-compose.yml中各服务的环境变量修改
SPRING_DATA_MONGODB_URI: mongodb://root:pwd@mongo:27017/admin

同时修改userinfoservice的application.properties:

spring.data.mongodb.uri=mongodb://root:pwd@mongo:27017/admin

2. 修复服务间调用地址

容器内调用其他服务需使用服务名称而非localhost,修改userinfoservice的application.properties:

searchOrderByPhoneUrl=http://ordersearchservice:8081/orderSearchService/order/phone
searchProductByProductCode=http://productinfoservice:8082/productInfoService/product/names

3. 增加MongoDB健康检查(可选但推荐)

depends_on仅保证启动顺序,不确保服务就绪。给mongo服务添加健康检查,确保MongoDB完全启动后再启动依赖服务:
修改docker-compose.yml中的mongo服务:

mongo:
  image: mongo
  container_name: mongodb
  ports:
    - "27017:27017"
  environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: pwd
    MONGO_INITDB_DATABASE: admin
  healthcheck:
    test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
    interval: 10s
    timeout: 5s
    retries: 5

然后修改mongoimport和userinfoservice的depends_on配置:

mongoimport:
  image: mongo
  volumes:
    - ./mongo/data/users.json:/src/data/users.json
  command: mongoimport --host mongo --username root --password pwd --db admin --collection users --file /src/data/users.json --jsonArray
  depends_on:
    mongo:
      condition: service_healthy

userinfoservice:
  build:
    context: ./user-info-service
    dockerfile: Dockerfile
  image: user-info-service
  ports:
    - "8083:8083"
  depends_on:
    productinfoservice:
      condition: service_started
    mongo:
      condition: service_healthy
  environment:
    SPRING_DATA_MONGODB_URI: mongodb://root:pwd@mongo:27017/admin

验证修复

  1. 停止所有容器:docker-compose down
  2. 重新构建并启动:docker-compose up --build
  3. 调用userinfoservice的接口,确认能正常连接MongoDB获取数据

内容的提问来源于stack exchange,提问作者Anubhav Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:36:07