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
验证修复
- 停止所有容器:
docker-compose down - 重新构建并启动:
docker-compose up --build - 调用
userinfoservice的接口,确认能正常连接MongoDB获取数据
内容的提问来源于stack exchange,提问作者Anubhav Sharma
相关产品推荐
相关产品推荐

