GitHub 复制操作失败:未指定源文件
GitHub Action COPY failed: no source files were specified
配置 GitHub 操作以构建此项目的图像我收到此错误:
Step 5/7 : COPY /target/*.jar app.jar
COPY failed: no source files were specified
这是项目 Dockerfile,我从构建上下文路径而不是相对路径引用文件。
FROM openjdk:8-jdk-alpine as build
COPY . /usr/app
WORKDIR /usr/app
RUN chmod +x mvnw \
&& ./mvnw --version \
&& ./mvnw clean package
COPY /usr/app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
我已经验证文件是否存在并使用 ls -l /target
命令读取权限:
drwxr-xr-x 3 root root 4096 Oct 18 15:35 classes
drwxr-xr-x 3 root root 4096 Oct 18 15:35 generated-sources
drwxr-xr-x 3 root root 4096 Oct 18 15:35 generated-test-sources
-rw-r--r-- 1 root root 48625321 Oct 18 15:35 learning-spring-boot-0.0.1.jar
-rw-r--r-- 1 root root 33089 Oct 18 15:35 learning-spring-boot-0.0.1.jar.original
drwxr-xr-x 2 root root 4096 Oct 18 15:35 maven-archiver
drwxr-xr-x 3 root root 4096 Oct 18 15:35 maven-status
drwxr-xr-x 2 root root 4096 Oct 18 15:35 surefire-reports
drwxr-xr-x 3 root root 4096 Oct 18 15:35 test-classes
这是 ./mvnw clean package
命令后 find .
的输出:
./target/learning-spring-boot-0.0.1.jar
./target/maven-archiver
./target/maven-archiver/pom.properties
./target/generated-sources
./target/generated-sources/annotations
./target/surefire-reports
使用相对路径在本地运行,但使用来自构建上下文的路径失败。
COPY /target/*.jar app.jar
Here 是项目 url.
我错过了什么?
ADD
将构建上下文中的内容包含到图像中,它不会复制图像中的文件。对于后者,只需执行 RUN cp ...
命令,例如
FROM openjdk:8-jdk-alpine as build
COPY . /project
WORKDIR /project
RUN chmod +x mvnw \
&& ./mvnw --version \
&& ./mvnw clean package \
&& cp ./target/learning-spring-boot-0.0.1.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
由于您将 WORKDIR
更改为 /project
,因此不应包含在 cp
中,除非您使用绝对路径。
在我看来,您想使用多阶段 docker 构建,但您没有启动第二阶段。第二个 COPY
步骤不起作用,因为它仍处于同一阶段。就像 BMitch 提到的,在同一阶段,您只能使用 COPY 从构建上下文中进行复制。我对您的 Dockerfile
进行了一些更改(开始第二阶段,在 COPY 中使用了 --from
),现在构建良好。 Dockerfile 内容如下:
FROM openjdk:8-jdk-alpine as build
COPY . /usr/app
WORKDIR /usr/app
RUN chmod +x mvnw \
&& ./mvnw --version \
&& ./mvnw clean package
FROM openjdk:8-jre-alpine
COPY --from=build /usr/app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
配置 GitHub 操作以构建此项目的图像我收到此错误:
Step 5/7 : COPY /target/*.jar app.jar
COPY failed: no source files were specified
这是项目 Dockerfile,我从构建上下文路径而不是相对路径引用文件。
FROM openjdk:8-jdk-alpine as build
COPY . /usr/app
WORKDIR /usr/app
RUN chmod +x mvnw \
&& ./mvnw --version \
&& ./mvnw clean package
COPY /usr/app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
我已经验证文件是否存在并使用 ls -l /target
命令读取权限:
drwxr-xr-x 3 root root 4096 Oct 18 15:35 classes
drwxr-xr-x 3 root root 4096 Oct 18 15:35 generated-sources
drwxr-xr-x 3 root root 4096 Oct 18 15:35 generated-test-sources
-rw-r--r-- 1 root root 48625321 Oct 18 15:35 learning-spring-boot-0.0.1.jar
-rw-r--r-- 1 root root 33089 Oct 18 15:35 learning-spring-boot-0.0.1.jar.original
drwxr-xr-x 2 root root 4096 Oct 18 15:35 maven-archiver
drwxr-xr-x 3 root root 4096 Oct 18 15:35 maven-status
drwxr-xr-x 2 root root 4096 Oct 18 15:35 surefire-reports
drwxr-xr-x 3 root root 4096 Oct 18 15:35 test-classes
这是 ./mvnw clean package
命令后 find .
的输出:
./target/learning-spring-boot-0.0.1.jar
./target/maven-archiver
./target/maven-archiver/pom.properties
./target/generated-sources
./target/generated-sources/annotations
./target/surefire-reports
使用相对路径在本地运行,但使用来自构建上下文的路径失败。
COPY /target/*.jar app.jar
Here 是项目 url.
我错过了什么?
ADD
将构建上下文中的内容包含到图像中,它不会复制图像中的文件。对于后者,只需执行 RUN cp ...
命令,例如
FROM openjdk:8-jdk-alpine as build
COPY . /project
WORKDIR /project
RUN chmod +x mvnw \
&& ./mvnw --version \
&& ./mvnw clean package \
&& cp ./target/learning-spring-boot-0.0.1.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
由于您将 WORKDIR
更改为 /project
,因此不应包含在 cp
中,除非您使用绝对路径。
在我看来,您想使用多阶段 docker 构建,但您没有启动第二阶段。第二个 COPY
步骤不起作用,因为它仍处于同一阶段。就像 BMitch 提到的,在同一阶段,您只能使用 COPY 从构建上下文中进行复制。我对您的 Dockerfile
进行了一些更改(开始第二阶段,在 COPY 中使用了 --from
),现在构建良好。 Dockerfile 内容如下:
FROM openjdk:8-jdk-alpine as build
COPY . /usr/app
WORKDIR /usr/app
RUN chmod +x mvnw \
&& ./mvnw --version \
&& ./mvnw clean package
FROM openjdk:8-jre-alpine
COPY --from=build /usr/app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]