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

Spring Boot连接Docker Compose部署的MongoDB端口映射异常排查

解决Spring Boot连接Docker MongoDB时的端口映射错误

问题重现

运行Spring Boot应用连接Docker Compose管理的MongoDB时,抛出错误:

java.lang.IllegalStateException: No host port mapping found for container port 27017

尽管docker-compose.yml中已将MongoDB配置为使用27018端口,且Spring Boot的application.yml也指向了localhost:27018。

可能的原因及解决方案

1. 检查Spring Boot配置是否被覆盖

Spring Boot配置存在优先级,可能有其他配置覆盖了application.yml的端口设置:

  • 查看系统环境变量,确认是否存在SPRING_DATA_MONGODB_PORT=27017,或SPRING_DATA_MONGODB_URI包含27017端口的情况。
  • 检查环境特定配置文件(如application-dev.yml),看是否重新设置了MongoDB端口。
  • 排查代码中是否有硬编码的MongoClient配置,比如手动指定了27017端口:
    // 错误示例:硬编码27017端口
    MongoClient mongoClient = MongoClients.create("mongodb://admin:secret@localhost:27017/character_data");
    

2. 验证MongoDB容器是否真的在27018端口运行

确保Docker容器内的MongoDB确实监听27018端口:

  • 执行命令查看容器内端口监听状态:
    docker exec character-media netstat -tulpn | grep mongod
    
    输出应显示0.0.0.0:27018,说明Mongo在27018端口正常监听。
  • 查看容器启动日志,确认端口配置生效:
    docker logs character-media
    
    日志中应包含类似waiting for connections on port 27018的内容。如果没有,检查command: mongod --port 27018是否存在拼写错误。

3. 若Spring Boot也在Docker容器中运行

如果你的Spring Boot应用同样通过Docker Compose部署,不要用localhost连接MongoDB:

  • 修改application.yml中的URI,使用Docker Compose服务名mongo代替localhost:
    spring:
      data:
        mongodb:
          uri: mongodb://admin:secret@mongo:27018/character_data
    
    Docker Compose会自动解析服务名到对应容器IP,内部通信无需依赖主机端口映射。

4. 检查是否使用了Testcontainers等测试工具

如果是测试环境出现该错误,可能是Testcontainers自动启动的Mongo容器默认用27017端口,需在测试配置中指定端口:

@Container
public static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:latest")
        .withExposedPorts(27018);

总结

先确认Mongo容器的端口配置是否生效,再排查Spring Boot的配置优先级问题,最后根据部署环境调整连接地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:52:40