首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker多阶段ONBUILD不执行第一阶段onbuild命令

Docker多阶段ONBUILD不执行第一阶段onbuild命令
EN

Stack Overflow用户
提问于 2021-04-05 19:36:50
回答 1查看 253关注 0票数 1

我正在尝试为一个Java项目创建一个多阶段的ONBUILD镜像,请参见下面的示例。第一次迭代在检查构建结果时,似乎只在最后阶段看到了ONBUILD命令。

代码语言:javascript
复制
FROM maven:3.6.3-jdk-11-slim AS build
RUN mkdir /project
WORKDIR /project
ONBUILD COPY pom.xml /project
ONBUILD RUN mvn dependency:go-offline --batch-mode
ONBUILD COPY . /project
ONBUILD RUN mvn package

FROM adoptopenjdk/openjdk11:jre-11.0.6_10-alpine
RUN mkdir /app
WORKDIR /app
ONBUILD COPY --from=build /project/target/*.jar /app/application.jar

CMD ["java", "-jar", "application.jar"]

我决定将阶段划分为2个图像,然后将它们组合到应用程序图像中。

代码语言:javascript
复制
FROM maven:3.6.3-jdk-11-slim AS build
RUN mkdir /project
WORKDIR /project
ONBUILD COPY pom.xml /project
ONBUILD RUN mvn dependency:go-offline --batch-mode
ONBUILD COPY . /project
ONBUILD RUN mvn package
代码语言:javascript
复制
FROM adoptopenjdk/openjdk11:jre-11.0.6_10-alpine
RUN mkdir /app
WORKDIR /app
ONBUILD COPY --from=build /project/target/*.jar /app/application.jar

CMD ["java", "-jar", "application.jar"]

通过以下方式组合这两个图像后,检查两个图像会显示正确的ONBUILD命令:

代码语言:javascript
复制
FROM maven-jdk-11-onbuild:latest as build

FROM jre-11-onbuild:latest

结果,它只从第二个映像执行ONBUILD COPY命令。

代码语言:javascript
复制
[+] Building 0.2s (6/6) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                   0.0s
 => => transferring dockerfile: 120B                                                                                                                                           0.0s
 => [internal] load .dockerignore                                                                                                                                              0.0s
 => => transferring context: 34B                                                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/jre-11:onbuild                                                                                                                                                                                                           0.0s
 => CACHED [build 1/1] FROM docker.io/library/maven-jdk-11:onbuild                                                                                                     0.0s
 => CACHED [stage-1 1/1] FROM docker.io/library/jre-11:onbuild                                                                                                                                                                                                              0.0s
 => ERROR [stage-1 2/1] COPY --from=build /app/target/*.jar /app/application.jar                                                                                               0.1s
------
 > [stage-1 2/1] COPY --from=build /app/target/*.jar /app/application.jar:
------
lstat /var/lib/docker/overlay2/daced0019dbfe2605e586b5607160adb3358c22054ae2762a0338b3681eddd33/merged/app/target: no such file or directory

看起来第一个阶段由于某种原因被缓存了。可以将多阶段构建与ONBUILD逻辑结合起来吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-21 23:26:52

这在我之前的几次更新中是有效的(Docker for MacOS)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66952378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档