gpt4 book ai didi

java - 在docker文件: alpine-java-python and python3 removes installed java?中使用2 FROM

转载 作者:行者123 更新时间:2023-12-02 10:44:53 25 4
gpt4 key购买 nike

在我的项目中,我需要java和python3。我在 Dockerfile 中使用了 2 个 FROM 语句。

FROM docker.<xx>.com/alpine-java-python
......
......
FROM python3
......
......
CMD [ "java", "-jar", "abc.jar"]

启动容器时,它给出“未找到 java 命令”。为什么使用 FROM python3 时安装的 java 会被删除?

最佳答案

首先,回答您的问题:为什么使用“FROM python3”时已安装的 Java 被删除:

Docker Documentation状态:

FROM can appear multiple times within a single Dockerfile to create multiple images or use one build stage as a dependency for another...Each FROM instruction clears any state created by previous instructions.

所以发生的情况是,您的第二个“FROM”正在重写第一个“FROM”中所做的事情,这就是为什么您在最终图像中看不到 Java。

现在,回答隐含的问题:如何解决这个问题......

由于您希望将所有这些包包含在单个镜像中,因此您需要:

  1. 在单个“FROM”部分中添加软件包或
  2. 使用多阶段 docker 构建,将已安装、构建的软件包等从一条“FROM”指令提取到另一条“FROM”指令中。如果您想使用多阶段构建,我建议阅读 Docker Documentation on multi-stage builds .

对于此处的示例,选项 (1) 就足够了。对于这种情况,您应该能够执行以下操作:

FROM docker.<xx>.com/alpine-java-python
RUN apk update && apk add python3
......
......
......
......
CMD [ "java", "-jar", "abc.jar"]
<小时/>

请注意,如果基础镜像中存在 python2,那么现在将安装两个版本,并且您将希望在运行应用程序时引用 python3 版本,或更改默认版本。

关于java - 在docker文件: alpine-java-python and python3 removes installed java?中使用2 FROM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com