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

Mac M1环境Docker打包Spring Boot应用无法连接Docker部署的MySQL

解决Docker容器内Spring Boot应用无法连接宿主机MySQL的问题

核心问题原因

容器内部的127.0.0.1是容器自身的回环地址,并非指向你的Mac宿主机。所以当容器内的Spring Boot应用尝试连接127.0.0.1:3306时,实际是在访问容器自己的3306端口,而非宿主机上运行的MySQL容器。

解决方案

方案1:使用Docker for Mac专属宿主机地址

Docker为Mac(包括M1芯片)提供了特殊的地址host.docker.internal,用于容器访问宿主机服务。直接修改Spring Boot的数据库连接URL:

spring.datasource.url=jdbc:mysql://host.docker.internal:3306/your_database_name?useSSL=false&serverTimezone=UTC
  • 这个方案无需调整Docker网络配置,适合快速测试。

方案2:将MySQL和应用容器加入同一自定义网络

通过Docker自定义网络实现容器间的直接通信,更符合生产环境的网络隔离原则:

  1. 创建自定义Docker网络:
docker network create mysql-app-network
  1. 重启MySQL容器并加入该网络(替换your_mysql_password为你的实际密码):
docker run --name mysql-container --network mysql-app-network -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_mysql_password -d mysql:8.0
  1. 启动Spring Boot应用容器时也加入同一网络:
docker run --name your-springboot-app --network mysql-app-network -p 8080:8080 -d your-app-image:latest
  1. 修改Spring Boot的数据库连接URL,使用MySQL容器名称作为主机地址:
spring.datasource.url=jdbc:mysql://mysql-container:3306/your_database_name?useSSL=false&serverTimezone=UTC
  • 同一网络内的容器可以通过容器名直接解析通信,无需依赖宿主机端口映射。

方案3:确认MySQL容器的绑定地址

确保MySQL容器允许外部连接:

  • 默认官方MySQL镜像启动时,bind-address配置为0.0.0.0,允许所有IP访问。如果你自定义了MySQL配置文件,检查my.cnf中的bind-address是否为0.0.0.0,而非127.0.0.1。

额外注意事项

  • 如果你的Spring Boot应用配置是打包进镜像的,修改配置后需要重新构建镜像;如果使用环境变量传递配置,启动容器时通过-e参数指定更灵活:
docker run --name your-springboot-app -e spring.datasource.url=jdbc:mysql://host.docker.internal:3306/your_database_name?useSSL=false&serverTimezone=UTC -p 8080:8080 -d your-app-image:latest
  • 针对M1芯片,尽量选择支持arm64架构的镜像(如官方mysql:8.0),避免因架构不兼容导致的隐性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:57:51