在 docker 文件中使用 2 FROM:alpine-java-python 和 python3 删除已安装的 java?
Using 2 FROM in docker file: alpine-java-python and python3 removes installed java?
在我的项目中,我需要 java 和 python3。
我在 Dockerfile 中使用了 2 个 FROM 语句。
FROM docker.<xx>.com/alpine-java-python
......
......
FROM python3
......
......
CMD [ "java", "-jar", "abc.jar"]
在容器启动时它给出 "java command not found"。
为什么使用 FROM python3 时安装的 java 会被删除?
首先,回答你为什么安装的 Java 在使用 'FROM python3' 时被删除的问题:
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 的原因。
现在,要回答隐含的问题,即如何解决这个问题...
由于您希望将所有这些包都放在一个图像中,您需要:
- 在单个 'FROM' 部分或
中添加包
- 使用多阶段 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 和 python3。 我在 Dockerfile 中使用了 2 个 FROM 语句。
FROM docker.<xx>.com/alpine-java-python
......
......
FROM python3
......
......
CMD [ "java", "-jar", "abc.jar"]
在容器启动时它给出 "java command not found"。 为什么使用 FROM python3 时安装的 java 会被删除?
首先,回答你为什么安装的 Java 在使用 'FROM python3' 时被删除的问题:
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 的原因。
现在,要回答隐含的问题,即如何解决这个问题...
由于您希望将所有这些包都放在一个图像中,您需要:
- 在单个 'FROM' 部分或 中添加包
- 使用多阶段 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 版本,或者更改默认版本。