我有一个自定义基础映像,在构建过程中我设置了一些环境变量,这样:
基础镜像的Dockerfile
FROM oraclelinux:7-slim
...
ENV JAVA_HOME=/usr/java/jdk-8
...
然后我使用这个 docker 镜像作为另一个镜像的基础镜像。 在子图像中,我使用这些预先配置的变量,一切正常。
但是代码质量检查器正确地抱怨子图像中缺少声明并显示警告。该警告是正确的,因为代码质量检查器看不到此变量是在父图像中定义的。
子镜像的Dockerfile:
FROM my-base-image:1.0.0
...
RUN $JAVA_HOME/bin/java ...
如果未设置(在父图像中),是否有任何好的方法可以在图像构建期间为
Dockerfile
中的变量分配默认值?
我正在寻找与 bash 类似的东西:
JAVA_HOME="${1:-$DEFAULT_VALUE}"
。
像这样,当然,这在
Dockerfile
中不起作用:ENV JAVA_HOME="${this:-"default-value"}"
我知道我可以使用
*.env
文件并在那里设置默认值,并且我还可以在 docker-compose.yml
文件中定义默认值。
但我的问题与此无关。 我的问题与用例有关,其中
ENV
,例如 ENV JAVA_HOME="..."
在父图像中定义。
也许类似
FROM my-base-image:1.0.0
ARG JAVA_HOME=/usr/java/jdk-8
...
RUN $JAVA_HOME/bin/java ...