GitHub Action COPY失败:没有指定源文件



配置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

项目地址

我错过了什么?

在我看来,您想使用多级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"]

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中。

最新更新