【问题标题】:Problem building gcloud project : COPY failed: no source files were specified构建 gcloud 项目时出现问题:复制失败:未指定源文件
【发布时间】:2021-01-03 08:51:09
【问题描述】:

我有一个带有 DockerFile 的 java 项目,看起来像这样:

FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} shape-shop-backend.jar
ENTRYPOINT ["java","-jar","/shape-shop-backend.jar"]

如果我这样运行 docker:

C:\dev\shape-shop>docker build -t testtest:1.0

它完美地构建了一个图像。

我假设“gcloud builds submit”以相同的方式工作。我在谷歌云上有一个名为 whataboutanewproject 的项目,所以在同一目录中我运行以下命令:

C:\dev\shape-shop>gcloud builds submit --tag gcr.io/whataboutanewproject/shapeshop

但我收到此错误:

Digest: sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f2283343547b3
Status: Downloaded newer image for openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/6 : RUN addgroup -S spring && adduser -S spring -G spring
 ---> Running in 36cf2156a797
Removing intermediate container 36cf2156a797
 ---> 7320b32f6fe1
Step 3/6 : USER spring:spring
 ---> Running in f439aa9ca30e
Removing intermediate container f439aa9ca30e
 ---> 67f952c7bc2a
Step 4/6 : ARG JAR_FILE=target/*.jar
 ---> Running in 0bcfbf5f3b79
Removing intermediate container 0bcfbf5f3b79
 ---> 7519fa3bdc2f
Step 5/6 : COPY ${JAR_FILE} shape-shop-backend.jar
COPY failed: no source files were specified
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ERROR: (gcloud.builds.submit) build d3704337-88de-4dda-a120-ebd2a01ee8c9 completed with status "FAILURE"

C:\dev\shape-shop>

为什么不能正确处理 DockerFile?

“gcloud build submit”甚至可以构建镜像吗? website 上的文档太垃圾了,我根本不知道这个“gcloud build submit”命令到底做了什么。

【问题讨论】:

    标签: docker google-cloud-platform gcloud


    【解决方案1】:

    我遇到了类似的问题,并在documentation for gcloud builds submit 中发现,如果您没有.gcloudignore 文件,您的.gitignore 文件将被使用,这对我来说是个问题。

    【讨论】:

      【解决方案2】:

      您必须指定源位置。

      gcloud builds submit ${PWD} ... 然后将复制例如${PWD}(通常使用 . 代替)到 Cloud Build 中的 /workspace(默认)目录,以便构建(特别是 COPY ${JAR_FILE} ... 可以继续。

      示例

      FROM busybox
      ARG JAR_FILE=target/test.txt
      COPY ${JAR_FILE} test.txt
      ENTRYPOINT ["more","test.txt"]
      

      注意最好将通配符复制到特定文件

      还有:

      .
      ├── Dockerfile
      └── target
          └── test.txt
      

      还有:

      docker build --tag=test --file=./Dockerfile .
      docker run --interactive --tty test:latest
      Hello Freddie!
      

      然后,假设 GCP 项目 ({PROJECT}) 启用了云:

      gcloud builds submit . --tag=gcr.io/${PROJECT}/test --project=${PROJECT}
      docker run --interactive --tty gcr.io/${PROJECT}/test:latest
      ...
      Hello Freddie!
      

      注意 gcloud builds submit 需要 .${PWD}

      【讨论】:

      • 我在哪里指定源位置?在 DockerFile 中?
      • 你应该不需要。 gcloud build submit . 会将你的本地文件复制到/workspace(默认)目录,然后你的 Dockerfile 可以从那里构建它。如果你可以docker build --tag=test --file=./Dockerfile . 那么你应该可以gcloud builds submit . --tag=...
      • 我还是一头雾水。我用“。”试过了。它给了我同样的错误 gcloud builds submit 。 --tag=gcr.io/whataboutanewproject/testxyz --project=whataboutanewproject :我也尝试使用 ${PWD}。 PWD 代表密码吗?
      猜你喜欢
      • 2020-05-02
      • 2019-10-27
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2022-07-16
      • 2022-01-14
      • 1970-01-01
      • 2022-12-25
      相关资源
      最近更新 更多