动态设置docker容器的JAVA_HOME

时间:2017-04-27 10:34:06

标签: docker dockerfile java-home

我的docker容器需要设置JAVA_HOME。我已将它添加到Dockerfile中,如下所示

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre

然而,这是一个硬编码的价值。有没有办法可以从图像本身动态获取此值

4 个答案:

答案 0 :(得分:1)

从Dockerfile构建的图像永远是静态的。除非重建,否则它的Java位置永远不会改变。

然而,当图像作为容器启动时,任何事情都可能发生。如果有任何脚本将在运行时编辑Java位置,那么此脚本可能也应该更新JAVA_HOME

如果您的意思是要使用具有不同java位置的任意基本映像动态构建映像,那么这可能应该由构建脚本处理。

答案 1 :(得分:1)

在docker容器中设置JAVA_HOME

官方映像的默认Docker文件为Dockerfile

如果您仍然希望使用Java home set设置自己的映像。将此行添加到您的 Dockerfile

RUN apt-get update && \
    apt-get install -y openjdk-8-jdk && \
    apt-get install -y ant && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/ && \
    rm -rf /var/cache/oracle-jdk8-installer;

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME

答案 2 :(得分:0)

你可以在CMD中做这样的事情:

# rpm -qa | grep java-1.8
java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64

然后

#rpm -ql java-1.8.0-openjdk | sed -n '1p' | cut -d/ -f1-5
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64

答案 3 :(得分:0)

有可能在JAVA_HOME Dockerfile指令中添加ENV。但是,如果Java软件包已更新,则必须在Dockerfile中更改ENV JAVA_HOME

但是我找到了一种无需更新Dockerfile即可自动设置JAVA_HOME的方法。

RUN export JAVA_HOME="$(dirname $(dirname $(readlink -f $(which java))))"

希望这对您有所帮助。