无法从Spring Boot应用连接Docker部署的MySQL服务器
解决Windows本地Spring Boot连接Docker MySQL 5.7失败的问题
可能的原因及对应解决方案
1. MySQL root用户远程访问权限未开启
Docker部署的MySQL默认root用户仅允许容器内部访问,Windows主机属于远程连接场景,需要手动授权:
- 进入MySQL容器:
docker exec -it docker-mysql mysql -uroot -proot - 执行授权SQL:
这条命令允许root用户从任意IP访问TEST数据库,执行完成后退出容器即可。GRANT ALL PRIVILEGES ON TEST.* TO 'root'@'%' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;
2. JDBC URL参数缺失或错误
使用com.mysql.cj.jdbc.Driver(MySQL 8.0+版本驱动)连接MySQL 5.7时,必须补充必要参数避免兼容性问题:
修改application.properties中的数据源URL为:
spring.datasource.url=jdbc:mysql://localhost:3306/TEST?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
serverTimezone:解决时区不匹配导致的驱动异常allowPublicKeyRetrieval:允许驱动获取MySQL公钥,解决连接时的权限验证报错
3. Docker网络映射异常(localhost无法访问时)
如果上述操作后仍无法连接,可能是Windows与Docker的网络映射存在问题:
- 查看MySQL容器的IP地址:
docker inspect docker-mysql | findstr "IPAddress" - 将JDBC URL中的
localhost替换为上述命令得到的容器IP,例如:spring.datasource.url=jdbc:mysql://172.17.0.2:3306/TEST?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
4. Windows防火墙拦截
检查Windows防火墙是否阻止了3306端口的入站/出站请求,可暂时关闭防火墙测试,或添加规则允许Spring Boot应用访问3306端口。
内容的提问来源于stack exchange,提问作者Benedek József Lakatos
相关产品推荐
相关产品推荐

