Docker变量扩展

时间:2018-01-09 14:06:17

标签: docker dockerfile

有没有办法在dockerfile的ENV部分进行变量扩展?在下面的示例中,我希望javaMemoryLimit能够在JAVA_OPTS中扩展,但我发现当我运行图像时,java进程存在而不是 -Xmx1024M 我们留下 -Xmx

    Function<Person , Employee> function = p -> {
        ......
        return new Employee() ;
    } ; 

    Employee e = function.apply(new Person());

我有以下工作,但我宁愿通过修改JAVA_OPTS变量而不是在java命令中添加额外的开关来完成:

FROM azul/zulu-openjdk-centos:latest
VOLUME /tmp
ADD myspecificcode.jar app.jar
RUN bash -c 'touch /app.jar'
ENV javaMemoryLimit="1024M"\
    JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 -XX:+MaxFDLimit -XX:+ExplicitGCInvokesConcurrent -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -Xmx$javaMemoryLimit"
ENTRYPOINT java $JAVA_OPTS -jar /app.jar

1 个答案:

答案 0 :(得分:3)

Docker documentation解释了这些值仅在后代命令中可用。因此,您必须将其拆分为单独的ENV命令:

ENV javaMemoryLimit=1024M \
    gcInterval=3600000
ENV JAVA_OPTS="-Dsun.rmi.dgc.client.gcInterval=$gcInterval -Xmx$javaMemoryLimit"
  

ENV指令将环境变量设置为值   。此值将位于所有后代的环境中   Dockerfile命令也可以在很多内联替换。