You need to enable JavaScript to run this app. 使用docker-compose部署时Java容器无法连接MySQL容器报503错误求助
优惠活动
大模型
产品
解决方案
定价
更多

使用docker-compose部署时Java容器无法连接MySQL容器报503错误求助

Docker环境Java服务连接MySQL 503错误排查与修复

核心错误点梳理

经过核对配置,可按以下优先级排查问题:

  • 服务名拼写不匹配:docker-compose中MySQL服务名为my_db,但Java服务配置的JDBC地址写为my-db,Docker内部DNS无法解析该域名导致连接失败
  • 环境变量冲突不生效:Dockerfile中默认读取DB_URL作为数据库连接地址,值为localhost:3306,但compose中传入的变量是spring.datasource.url,若Java代码未适配该变量,配置完全不生效;且容器内localhost指向Java服务自身,无法访问MySQL容器
  • 数据库未自动初始化:MySQL容器配置中未声明MYSQL_DATABASE参数,启动时不会自动创建lavagna库,Java服务连接时找不到目标库报错
  • 启动时序问题:depends_on仅控制容器启动顺序,无法保证MySQL初始化完成、可接受连接后再启动Java服务,易出现偶发连接失败
  • 账号权限问题:若使用root账号连接MySQL,默认仅允许容器本地登录,跨容器访问需要额外授权;也可直接使用你配置的普通用户eyal

具体修复方案

1. 修正docker-compose.yml配置

修改后完整配置如下:

version: "3.3" 

services: 
    lavagna:
        build: .
        ports:
            - "8080:8080"
        networks: 
            - back_net
        depends_on:
            my_db:
                condition: service_healthy
        environment: 
            # 统一使用Dockerfile中定义的DB_前缀变量,确保配置生效
            DB_URL: "jdbc:mysql://my_db:3306/lavagna?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" 
            DB_USER: "root"
            DB_PASS: "123"
    my_db: 
        image: mysql:5.7
        ports: 
            - "3306:3306" 
        networks: 
            - back_net
        volumes: 
            - $PWD/mysql:/var/lib/mysql
        environment: 
            MYSQL_ROOT_PASSWORD: 123
            MYSQL_USER: eyal
            MYSQL_PASSWORD: 123
            # 新增参数,启动时自动创建lavagna库
            MYSQL_DATABASE: lavagna
        # 新增健康检查,确保MySQL就绪后再启动Java服务
        healthcheck:
            test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-uroot", "-p123"]
            timeout: 10s
            retries: 10
networks: 
    back_net:
        driver: bridge

2. 可选优化Dockerfile配置

删除Dockerfile中重复的DB相关默认变量,避免本地构建测试时和容器环境配置冲突:

FROM openjdk:8-jre-alpine
EXPOSE 8080
COPY ./target/. .
COPY ./entrypoint.sh . 
ENV DB_DIALECT MYSQL
ENV SPRING_PROFILE dev
RUN apk update \
    && apk add ca-certificates \
    && update-ca-certificates && apk add openssl
RUN chmod 774 entrypoint.sh
ENTRYPOINT [ "./entrypoint.sh" ]

3. 验证修复效果

执行以下命令重新构建启动服务:

# 先清理旧的挂载卷,避免残留旧数据
docker-compose down -v
# 重新构建启动
docker-compose up --build

启动完成后查看Java服务日志确认连接正常:

docker logs <你的lavagna容器ID>

如果仍有报错,可根据日志中的明确提示(如驱动版本不匹配、账号密码错误)进一步适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 08:15:03