SpringBoot应用连接MySQL Docker容器问题咨询
连接宿主机Spring Boot到Docker容器内的MySQL方案
嘿,很高兴你开始尝试Spring Boot + Docker MySQL的组合!我来帮你梳理下具体的连接步骤,其实很简单:
1. 先确认Docker容器状态
首先确保你的MySQL容器已经正常启动并完成端口映射,在docker-compose.yml所在目录执行:
docker-compose ps
你应该能看到db容器的状态是Up,并且端口列显示0.0.0.0:3306->3306/tcp——这说明宿主机的3306端口已经和容器内的3306端口绑定成功了。
2. 配置Spring Boot的数据源
接下来修改你的Spring Boot项目配置文件(application.properties或application.yml),填入正确的连接信息:
如果用application.properties:
# 核心连接URL:localhost对应宿主机,users是你在docker-compose中创建的数据库 spring.datasource.url=jdbc:mysql://localhost:3306/users?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true # 用户名与Docker环境变量一致 spring.datasource.username=root # 密码为你设置的secret spring.datasource.password=secret # MySQL 8.x版本驱动类(5.x版本请用com.mysql.jdbc.Driver) spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
如果用application.yml:
spring: datasource: url: jdbc:mysql://localhost:3306/users?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true username: root password: secret driver-class-name: com.mysql.cj.jdbc.Driver
这里几个参数补充说明:
useSSL=false:本地测试场景下关闭SSL连接,避免不必要的报错serverTimezone=UTC:解决MySQL 8.x版本的时区匹配问题allowPublicKeyRetrieval=true:避免连接时出现"public key retrieval is not allowed"的错误
3. 先验证连接(可选但推荐)
在启动Spring Boot应用前,建议先在宿主机用MySQL客户端测试连接,确认容器内的数据库能正常访问:
mysql -h localhost -P 3306 -u root -p
输入密码secret后如果能进入MySQL命令行,说明容器侧的配置没问题,接下来启动Spring Boot应用就能正常连接了。
可能遇到的小坑
- 如果连接失败,先检查宿主机的防火墙是否开放了3306端口;
- 如果你用的是Linux系统,偶尔会遇到本地MySQL服务占用3306端口的情况,这时可以修改docker-compose.yml里的宿主机端口(比如改成
3307:3306),然后Spring Boot的URL里改成localhost:3307即可。
内容的提问来源于stack exchange,提问作者MrADOY
相关产品推荐
相关产品推荐

