【问题标题】:GitHub Action COPY failed: no source files were specifiedGitHub Action COPY 失败:未指定源文件
【发布时间】:2021-12-05 16:49:36
【问题描述】:

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

这是find ../mvnw clean package 命令之后的输出:

./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 是项目地址。

我错过了什么?

【问题讨论】:

  • 你试过在本地而不是在 github 上构建这个 dockerfile 吗? app.jar 是否已提交并在 git 存储库中具有正确的权限?尝试在 repo 的新克隆上本地构建。
  • 是的,抱歉,请参阅我的更新。让我检查存储库权限

标签: docker dockerfile github-actions


【解决方案1】:

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 中,除非您使用绝对路径。

【讨论】:

  • 我仍然收到同样的错误:cp: can't stat './project/target/learning-spring-boot-0.0.1.jar': No such file or directory
【解决方案2】:

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

【讨论】:

  • 太棒了,我现在理解得更好了,顺便说一下,这个多阶段构建大大减少了我的图像大小 ~70 MB,非常好
猜你喜欢
  • 2021-03-19
  • 2019-10-27
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
相关资源
最近更新 更多