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

Docker镜像构建报错:找不到java-app文件,如何不改目录结构解决?

Docker构建找不到java-app文件的问题解决

目录结构

.
├── docker
│  ├── docker-compose.yml
│  └── Dockerfile
├── java-app
│  ├── pom.xml
│  └── src

报错信息

=> [internal] load build context                                                                                                  0.0s
 => => transferring context: 2B                                                                                                    0.0s
 => CACHED [2/5] WORKDIR /app                                                                                                      0.0s
 => ERROR [3/5] COPY java-app/pom.xml /app/                                                                     0.0s
 => ERROR [4/5] COPY java-app/src /app/src                                                                      0.0s
------
 > [3/5] COPY java-app/pom.xml /app/:
------
------
 > [4/5] COPY java-app/src /app/src:
------
Dockerfile:8
--------------------
   6 |     
   7 |     # Copy the necessary files to the working directory
   8 | >>> COPY java-app/pom.xml /app/
   9 |     COPY java-app/src /app/src
  10 |     
--------------------
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref b1c85d8c-d082-47bf-843c-99a804945668a::o15zbeasfb4ieh2fetvzcczhp4a: "/java-app/pom.xml": not found

原Dockerfile内容

# Use a base image with Java 11 installed
FROM eclipse-temurin:11-jdk

# Set the working directory inside the container
WORKDIR /app

# Copy the necessary files to the working directory
COPY ../java-app/pom.xml /app/
COPY ../java-app/src /app/src

# Build the application
RUN ./mvn package -DskipTests

# Expose the port on which the application will run
EXPOSE 8080

# Start the application
CMD ["java", "-jar", "target/your-app.jar"]

问题原因

  1. Docker构建上下文限制:Docker不允许用../跳出当前构建上下文访问文件,所有COPY/ADD的路径必须是上下文内的路径。
  2. 构建命令上下文错误:你应该是在docker目录下执行的docker build,此时默认上下文是docker目录,里面没有java-app,自然找不到文件。

解决方法(不修改目录结构)

1. 修正Dockerfile

把COPY路径里的../去掉,同时修正Maven命令路径:

# Use a base image with Java 11 installed
FROM eclipse-temurin:11-jdk

# Set the working directory inside the container
WORKDIR /app

# Copy the necessary files to the working directory
COPY java-app/pom.xml /app/
COPY java-app/src /app/src

# Build the application
RUN mvn package -DskipTests

# Expose the port on which the application will run
EXPOSE 8080

# Start the application
CMD ["java", "-jar", "target/your-app.jar"]

说明:原命令里的./mvn改为mvn,因为基础镜像中Maven已经配置到系统PATH,直接调用即可。

2. 执行正确的构建命令

切换到项目根目录(即包含docker和java-app的那个目录),运行:

docker build -f docker/Dockerfile -t your-app-image .
  • -f docker/Dockerfile:指定Dockerfile的位置(因为它在docker子目录下)
  • -t your-app-image:给镜像设置一个自定义标签(可替换成你想要的名字)
  • .:指定构建上下文为当前项目根目录,这样Docker就能访问到java-app文件夹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:22:36