Docker部署的Spring Boot服务无法连接Docker MySQL数据库求助
问题:Docker部署的Spring Boot服务无法连接同Docker部署的MySQL,但本地Toad可连接
- 错误信息:
com.mysql.cj.jdbc.exceptions.CommunicationsException:
docker-compose.yaml 配置
version: "3.7" services: mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: Jadeite1! MYSQL_DATABASE: account ports: - "3306:3306" networks: - jadeite1000 accountwebservices: image: bithead/accountwebservices:latest environment: SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/account SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: Jadeite1! mem_limit: 700m ports: - "8080:8080" networks: - jadeite1000 networks: jadeite1000: null
application.properties 配置
#Enabling MYSQL: spring.datasource.url=jdbc:mysql://localhost:3306/account spring.datasource.username=root spring.datasource.password=Jadeite1! spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect server.port=8080 #spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=none spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true rosalind_url=https://uguc.outsystemsenterprise.com/Rosalind/rest/v1/ x_api_key=cc6c6117-ce9a-41a4-a2a0-34a992d27d5c x_fapi_financial_id=UHCE00VKVHPGEYRZB906 spring.jackson.serialization.fail-on-empty-beans=false account.app.jwtSecret= bezKoderSecretKey account.app.jwtExpirationMs= 86400000
解决方法
核心问题:Docker Compose同一网络内的容器,localhost指向容器自身,而非宿主机或其他容器。
修改Spring Boot服务的数据库连接地址
将docker-compose中accountwebservices的SPRING_DATASOURCE_URL替换为:SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/account?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC额外参数是为了适配MySQL 8.x的连接限制,避免SSL、公钥检索和时区导致的连接失败。
配置优先级说明
docker-compose的环境变量优先级高于application.properties,修改后会自动覆盖本地配置。若想直接修改配置文件,可将application.properties中的spring.datasource.url改为jdbc:mysql://mysql:3306/account,再重新构建镜像。网络验证
两个服务已加入jadeite1000自定义网络,通过服务名称mysql即可直接连通,无需依赖宿主机端口映射(端口映射仅用于外部工具如Toad访问)。
内容的提问来源于stack exchange,提问作者jadeite1000
相关产品推荐
相关产品推荐

