在做 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 ..."
方式運