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 中的一些内容。
-
ADD
命令ADD
命令需要两个参数<src> and <dest>
。因此,您应该提供来自主机producer
路径作为 src 容器路径作为 dest。但在这种情况下,建议使用COPY
命令。COPY --chown=gradle:gradle producer /app/producer
-
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
. -
建议将
RUN gradle build --stacktrace
划分为ENTRYPOINT
和CMD
。完整的 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/