在做 Java 程序容器化时都会遇到一个问题,ENTRYPOINT ["java", "$JAVA_OPTS", "-jar", ...]
这样的写法 $JAVA_OPTS
就是个字符串无法在运行时展开。为了不把参数硬编码到容器里,每次调整参数重新构建镜像,可以有多种方案,先介绍几种不够好的方案。
ENTRYPOINT java $JAVA_OPTS -jar ...
,这种方式的问题是 java 不是容器主进程(至于为什么要保证 java 是主进程,又是一个话题,是容器化基本最佳实践之一);ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar ..."]
,这种写法其实等价于上面一种方式,上面一种方式在运行时就是以/bin/sh -c "java $JAVA_OPTS -jar ..."
方式运