我的docker容器需要设置JAVA_HOME。我已将它添加到Dockerfile中,如下所示
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre
然而,这是一个硬编码的价值。有没有办法可以从图像本身动态获取此值
答案 0 :(得分:1)
从Dockerfile构建的图像永远是静态的。除非重建,否则它的Java位置永远不会改变。
然而,当图像作为容器启动时,任何事情都可能发生。如果有任何脚本将在运行时编辑Java位置,那么此脚本可能也应该更新JAVA_HOME
。
如果您的意思是要使用具有不同java位置的任意基本映像动态构建映像,那么这可能应该由构建脚本处理。
答案 1 :(得分:1)
官方映像的默认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))))"
希望这对您有所帮助。