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

Docker化Spring Boot应用遇连接拒绝错误,求解决方案

问题:Docker化Spring Boot应用无法连接MySQL容器

项目地址:https://github.com/haseeb1988/spRegistration.git

已执行的Docker操作:

  • 创建网络:docker network create -d bridge sp-sql-net
  • 构建Spring Boot镜像:docker build -t springboot_website .
  • 运行应用容器:docker run --network sp-sql-net --name springboot_mysql_container_rest -p 8080:8080 springboot_website

问题详情:本地直接运行Spring Boot应用时,能正常连接Docker中的MySQL容器;但把Spring Boot应用打包成Docker容器后,连接同一个MySQL容器就启动失败。试过单独Docker命令和Docker Compose两种方式,都没解决。


排查与解决方案

1. 确认MySQL容器在同一网络

Spring Boot容器和MySQL容器必须在同一个Docker网络里才能互相访问,先检查你的MySQL容器是否加入了sp-sql-net:

  • 查看MySQL容器的网络信息:docker inspect <mysql容器名或ID> | grep Networks
  • 如果不在目标网络,执行命令加入:docker network connect sp-sql-net <mysql容器名或ID>

2. 修改数据库连接地址

本地运行时用的localhost:3306在Docker容器里指向容器自身,而非宿主机的MySQL容器。必须替换为MySQL容器的容器名或容器IP:

  • 用容器名做地址:比如MySQL容器名叫mysql-db,连接URL改成 jdbc:mysql://mysql-db:3306/你的数据库名?useSSL=false&serverTimezone=UTC
  • 用容器IP做地址:先查MySQL容器IP docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <mysql容器名>,再替换到URL中

3. 检查MySQL容器的启动配置

确保MySQL容器没有限制仅本地访问,启动时不要加--bind-address=127.0.0.1参数,正确的启动命令示例:
docker run --name mysql-db --network sp-sql-net -e MYSQL_ROOT_PASSWORD=你的密码 -e MYSQL_DATABASE=你的数据库名 -d mysql:latest

4. 处理MySQL初始化延迟

Spring Boot启动速度可能快于MySQL的初始化进程,导致连接失败:

  • 用Docker Compose的话,给MySQL加健康检查,让Spring Boot等MySQL就绪后再启动:
services:
  mysql:
    image: mysql:latest
    networks:
      - sp-sql-net
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: sp_registration
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      timeout: 5s
      retries: 5
  springboot-app:
    build: .
    networks:
      - sp-sql-net
    ports:
      - "8080:8080"
    depends_on:
      mysql:
        condition: service_healthy
  • 用单独Docker命令的话,手动等待MySQL启动完成(比如等30秒)再启动Spring Boot容器,或者在Spring Boot配置里增加连接重试(比如配置spring.datasource.hikari.connection-timeout和spring.datasource.hikari.max-retries)

5. 验证容器间网络连通性

进入Spring Boot容器,测试和MySQL容器的连通性:

  • 进入容器:docker exec -it springboot_mysql_container_rest /bin/bash
  • ping MySQL容器名:ping <mysql容器名>
  • 如果ping不通,说明网络配置存在问题,重新检查容器的网络关联

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:42:38