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

Docker Compose启动Spring/MySQL应用时镜像拉取权限被拒问题求助

问题解决步骤

核心错误:镜像标签不匹配

你构建镜像时执行的命令:

docker build -t spring-demo-app.jar .

会生成一个名为spring-demo-app.jar的本地镜像,但你的docker-compose.yml里指定的应用镜像是spring-demo-app:latest,Docker找不到对应标签的本地镜像,就会尝试去Docker Hub拉取公开镜像,进而触发权限拒绝错误。

解决方法:重新构建镜像,使用和docker-compose中一致的标签:

docker build -t spring-demo-app:latest .

其他必须修复的问题

1. MySQL密码未配置

你的docker-compose.yml中MySQL的MYSQL_ROOT_PASSWORD为空,这会导致MySQL容器直接启动失败(MySQL要求必须设置root密码)。需要补充密码:

mysql:
  image: mysql:latest
  container_name: mysql_container
  environment:
    MYSQL_ROOT_PASSWORD: your_custom_password  # 替换为实际密码
    MYSQL_DATABASE: karia
  # 其余配置不变

同时同步修改Spring应用的数据库密码配置:

spring_app:
  # 其余配置不变
  environment:
    SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/karia
    SPRING_DATASOURCE_USERNAME: root
    SPRING_DATASOURCE_PASSWORD: your_custom_password  # 和MySQL密码保持一致

2. Dockerfile路径一致性问题

你的Dockerfile中:

ADD target/spring-demo-app.jar spring-demo-app.jar
ENTRYPOINT ["java","-jar","/spring-demo-app.jar"]

ADD指令将jar包放到容器的当前工作目录,但ENTRYPOINT使用的是绝对路径/spring-demo-app.jar,虽然默认工作目录是/不会出错,但更稳妥的写法是统一路径:

ADD target/spring-demo-app.jar /spring-demo-app.jar
ENTRYPOINT ["java","-jar","/spring-demo-app.jar"]

3. Spring应用连接MySQL的时机问题

depends_on仅保证Spring容器在MySQL容器之后启动,但不保证MySQL服务已经完全就绪。Spring启动时可能因数据库未初始化完成而连接失败。可以给MySQL添加健康检查,让docker-compose等待MySQL服务就绪后再启动Spring:

mysql:
  # 其余配置不变
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
    timeout: 20s
    retries: 10
spring_app:
  # 其余配置不变
  depends_on:
    mysql:
      condition: service_healthy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:10:24