在 docker 文件中执行 gradle 命令时出错


FROM gradle:4.2.1-jdk8-alpine
WORKDIR /app
ADD --chown=gradle:gradle /app/producer /app
RUN ./gradlew build --stacktrace

项目结构如下。这是一个多模块项目

<code>
--springbootdocker (Root folder of project) <br>
--producer (Sub module Producer) <br> 
-- Dockerfile (for Producer)<br>
--consumer (Sub module Consumer) <br>
-- Dockerfile (for Consumer)<br
</code>

这是码头工人文件。
在做 docker 构建时:收到此错误

构建失败:

添加失败:统计/var/lib/docker/tmp/docker-builder561553413/app/producer: no such 文件或目录

在这里,您必须修复 Dockerfile 中的一些内容。

  1. ADD命令ADD命令需要两个参数<src> and <dest>。因此,您应该提供来自主机producer路径作为 src 容器路径作为 dest。但在这种情况下,建议使用COPY命令。

    COPY --chown=gradle:gradle producer /app/producer

  2. RUN ./gradlew它应该只是gradle,它WORKDIR应该是/app/producer.如果没有,它将失败,你会得到,

    运行gradle命令时Failed to create parent directory '/app/.gradle' when creating directory '/app/.gradle/4.2.1/fileHashes'错误。 因为WORKDIR /app由用户拥有root.

  3. 建议将RUN gradle build --stacktrace划分为ENTRYPOINTCMD

    完整的 Dockerfile

FROM gradle:4.2.1-jdk8-alpine
WORKDIR /app
COPY --chown=gradle:gradle producer /app/producer
WORKDIR /app/producer
ENTRYPOINT ["gradle"]
CMD ["build", "--stacktrace"]

docker build的部分输出

Starting a Gradle Daemon (subsequent builds will be faster)
:buildEnvironment
------------------------------------------------------------
Root project
------------------------------------------------------------
classpath
No dependencies
BUILD SUCCESSFUL in 5s
1 actionable task: 1 executed

这是当前正在运行的 dockerfile 没有任何错误。

FROM gradle:4.10.0-jdk8-alpine AS build
COPY --chown=gradle:gradle . /home/gradle/src/producer
WORKDIR /home/gradle/src/producer
RUN gradle bootJar --no-daemon --stacktrace
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=build/libs/*.jar
COPY --from=build /home/gradle/src/producer/build/libs/*.jar producer.jar
ENTRYPOINT ["java","-jar","/producer.jar"]

ADDed文件需要位于运行docker构建的目录下,因此根据您的结构,您可能需要类似以下内容:

ADD myProject /app

假设您有一个这样的结构:

Dockerfile
myProject/