Docker部署MySQL无法连接:SQL客户端及Spring Boot均报错
解决Docker化MySQL的连接拒绝问题
核心问题:端口映射错误
MySQL官方镜像默认监听的端口是3306,你启动容器时用了-p 3307:3307,相当于把宿主机3307端口映射到容器内的3307端口,但容器里的MySQL根本没在这个端口运行,自然会出现连接失败。
修复步骤
停止并删除现有容器
docker stop container_name docker rm container_name重新启动容器,修正端口映射
将宿主机3307端口映射到容器的3306端口(容器内MySQL的默认端口):docker run --name=container_name -p 3307:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql允许root用户远程访问(必要操作)
默认root用户仅允许本地登录,需进入容器修改权限:docker exec -it container_name mysql -u root -p登录后执行SQL:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES;(注:
%表示允许任意IP访问,生产环境建议限制具体IP范围)验证SQL客户端连接
- 服务器地址:填
localhost(容器名仅Docker内部网络可识别,宿主机访问用localhost) - 端口:
3307 - 账号:
root - 密码:
password
- 服务器地址:填
Spring Boot应用配置调整
修改application.properties或application.yml中的数据库连接配置:spring.datasource.url=jdbc:mysql://localhost:3307/你的数据库名?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password
Windows Hyper-V环境额外排查点
- 确认Windows防火墙未拦截3307端口,可临时关闭防火墙测试,或添加3307端口的入站允许规则。
- Hyper-V虚拟交换机的端口转发规则无需手动配置,Docker会自动处理端口映射。
内容的提问来源于stack exchange,提问作者Alessio Raddi
相关产品推荐
相关产品推荐

