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

Spring Boot镜像运行报错:/workspace/未找到Docker Compose文件

问题原因及解决办法

原因分析

  • 使用gradlew bootBuildImage构建镜像时,Paketo Buildpack默认仅打包Spring Boot应用的编译产物(如jar包、编译后的类文件等),不会将项目根目录的compose.yaml文件包含到镜像中。
  • 容器启动后,Spring Boot Docker Compose自动配置会在容器工作目录/workspace/下查找compose.yaml或docker-compose.yaml,但该目录中不存在目标文件,因此抛出No Docker Compose file found异常。

解决办法

方案1:通过Docker Compose统一管理应用与MySQL容器

在项目根目录的compose.yaml中添加Spring Boot应用的服务配置,让Docker Compose同时启动应用和MySQL:

services:
  mysql:
    # 保留原MySQL配置
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: employee_db
    ports:
      - "3306:3306"
  employee-service:
    image: docker.io/library/employee-service:0.0.1-SNAPSHOT
    ports:
      - "8080:8080"
    environment:
      SPRING_PROFILES_ACTIVE: int
    depends_on:
      - mysql

执行以下命令启动所有服务:

docker compose up

方案2:启动容器时挂载本地compose.yaml文件

通过-v参数将本地项目根目录的compose.yaml挂载到容器的/workspace/目录:

# Linux/macOS
docker run -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=int" -v $(pwd)/compose.yaml:/workspace/compose.yaml docker.io/library/employee-service:0.0.1-SNAPSHOT

# Windows PowerShell
docker run -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=int" -v ${PWD}/compose.yaml:/workspace/compose.yaml docker.io/library/employee-service:0.0.1-SNAPSHOT

# Windows CMD
docker run -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=int" -v %cd%/compose.yaml:/workspace/compose.yaml docker.io/library/employee-service:0.0.1-SNAPSHOT

方案3:构建镜像时将compose.yaml打包到镜像中

修改Gradle构建配置,让bootBuildImage将compose.yaml包含到镜像内:

  • Groovy DSL(build.gradle):
bootBuildImage {
  buildpacks = ["gcr.io/paketo-buildpacks/java"]
  extraDirectories {
    paths = ["compose.yaml"]
    permissions = ["0644"]
  }
}
  • Kotlin DSL(build.gradle.kts):
bootBuildImage {
  buildpacks.set(listOf("gcr.io/paketo-buildpacks/java"))
  extraDirectories {
    paths.set(listOf("compose.yaml"))
    permissions.set(mapOf("compose.yaml" to "0644"))
  }
}

重新执行gradlew bootBuildImage构建镜像,之后启动容器即可正常读取配置。

方案4:通过环境变量指定Compose文件路径

设置SPRING_DOCKER_COMPOSE_FILE环境变量,指定容器内Compose文件的位置,同时挂载本地文件到对应路径:

docker run -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=int" -e "SPRING_DOCKER_COMPOSE_FILE=/custom/path/compose.yaml" -v $(pwd)/compose.yaml:/custom/path/compose.yaml docker.io/library/employee-service:0.0.1-SNAPSHOT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:12:39