Docker Compose部署下Spring Boot与RabbitMQ、MySQL通信故障排查
Docker Compose部署Spring Boot应用连接失败排查指南
先修复当前配置里的明显错误
你的配置存在几个直接导致连接失败的问题:
- RabbitMQ地址错误:
application.properties里spring.rabbitmq.host=localhost,在Docker容器内,localhost指向容器自身而非RabbitMQ服务,需改为服务名rabbitmq:spring.rabbitmq.host=rabbitmq - MySQL数据库名不匹配:
application.properties中指定的数据库是thermostat,但docker-compose.yml里MySQL的MYSQL_DATABASE设置为mysqldb,二者需统一:
要么修改application.properties:
要么修改spring.datasource.url=jdbc:mysql://db:${MYSQL_PORT:3306}/mysqldbdocker-compose.yml的db服务环境变量:MYSQL_DATABASE: thermostat - 启动依赖缺失:Spring Boot启动时,MySQL和RabbitMQ可能未完成初始化,导致连接失败触发重启,需在
thermostat-app服务中添加启动依赖:
注意:depends_on: - db - rabbitmqdepends_on仅保证启动顺序,不保证服务就绪,若需确保服务可用,可配合wait-for-it脚本或健康检查配置。
通用排查步骤
1. 查看容器日志
直接查看Spring Boot应用的错误日志,定位具体连接失败原因:
docker-compose logs -f thermostat-app
MySQL连接失败通常会显示Connection refused或Unknown database;RabbitMQ连接失败则会出现Connection to localhost:5672 refused类信息。
2. 检查容器网络连通性
进入Spring Boot容器,测试与MySQL、RabbitMQ的连通性:
# 进入容器 docker-compose exec thermostat-app sh # ping MySQL服务(使用服务名db) ping db # ping RabbitMQ服务(使用服务名rabbitmq) ping rabbitmq # 测试MySQL端口连通性 nc -zv db 3306 # 测试RabbitMQ端口连通性 nc -zv rabbitmq 5672
若ping不通或端口无法连接,需确认容器是否在同一Docker网络:执行docker inspect net查看所有服务容器是否都加入了net网络。
3. 验证数据库和RabbitMQ服务状态
- 检查MySQL服务:进入MySQL容器,验证数据库是否存在、账号密码是否正确:
docker-compose exec db mysql -uroot -ppassword # 查看数据库列表 show databases;
- 检查RabbitMQ服务:在
docker-compose.yml的rabbitmq服务中添加端口映射ports: - "15672:15672",然后访问http://localhost:15672,用guest/guest登录确认服务正常运行。
4. 检查环境变量传递情况
在Spring Boot容器内查看环境变量是否正确加载:
docker-compose exec thermostat-app printenv
确认MYSQL_USER、MYSQL_PASSWORD、MYSQL_PORT等变量与docker-compose.yml配置一致。
5. 临时调整重启策略
将thermostat-app的restart: always改为restart: no,避免容器不断重启干扰调试,手动启动查看错误:
docker-compose up thermostat-app
内容的提问来源于stack exchange,提问作者jetski
相关产品推荐
相关产品推荐

