Spring Boot无法连接本地MongoDB问题求助
Spring Boot连接MongoDB容器时连接异常的解决办法
运行Spring Boot应用时抛出以下异常:
Exception in monitor thread while connecting to server localhost:8081
我尝试过两种配置方式,都没能解决问题:
- URI配置:
spring.data.mongodb.uri=mongodb://root:example@localhost:8081/test
- 拆分参数配置:
spring.data.mongodb.host=localhost spring.data.mongodb.port=8081 spring.data.mongodb.database=test spring.data.mongodb.username=root spring.data.mongodb.password=example
目前mongo-express管理面板可以通过localhost:8081正常访问,确认服务运行正常。本地启动MongoDB容器的Docker Compose配置如下:
# Use root/example as user/password credentials version: '3.1' services: mongo: image: mongo restart: always environment: MONGO_INITDB_DATABASE: test MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example mongo-express: image: mongo-express restart: always ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: example ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
问题根源
你搞混了MongoDB服务端口和mongo-express的端口:
- mongo-express是MongoDB的Web管理工具,它对外暴露的端口是8081(对应Docker Compose里的
8081:8081映射) - MongoDB服务本身默认使用27017端口,你的Docker Compose里没有把这个端口映射到主机,而且Spring配置错误地指向了mongo-express的8081端口,自然连不上MongoDB。
修复步骤
- 修改Docker Compose,映射MongoDB的27017端口
在mongo服务块里添加端口映射:
mongo: image: mongo restart: always ports: - 27017:27017 # 新增:将容器内27017端口映射到主机27017端口 environment: MONGO_INITDB_DATABASE: test MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example
执行命令重启容器:
docker-compose down && docker-compose up -d
- 修正Spring Boot的MongoDB配置
把配置里的端口从8081改成27017:
- URI配置修正后:
spring.data.mongodb.uri=mongodb://root:example@localhost:27017/test
- 拆分参数配置修正后:
spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=test spring.data.mongodb.username=root spring.data.mongodb.password=example
- 重启Spring Boot应用,此时就能正常连接到MongoDB容器了。
内容的提问来源于stack exchange,提问作者DSteman
相关产品推荐
相关产品推荐

