You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jib与基础镜像时JVM系统属性中环境变量未展开的问题咨询

问题背景与需求

我的Jib配置如下:

environment = [
                'QUARKUS_PROFILE'         : 'test',
                'TRUSTSTORE'              : '/etc/ssl/certs/java/cacerts/keystore.jks',
                'TRUSTSTORE_PASSWORD'     : 'no.secret',
                'JAVA_APP_JAR'            : '/deployments/myapp-runner.jar',
                'JAVA_APP_NAME'           : 'myapp',
// 尝试过使用JAVA_OPTS_APPEND或JAVA_TOOL_OPTIONS
                'JAVA_OPTS_APPEND'        : '-Djavax.net.ssl.trustStore=${TRUSTSTORE} -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}',
                'JAVA_TOOL_OPTIONS'       : '-Djavax.net.ssl.trustStore=${TRUSTSTORE} -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}'
        ]
entrypoint = 'INHERIT'

我有一个自定义基础镜像,希望运行官方的run-java.sh脚本,并且能传入已展开环境变量值的JVM系统属性。

已尝试的操作
  • 使用JAVA_OPTS_APPEND:因为run-java.sh会读取该变量,原本以为能触发变量展开
  • 使用JAVA_TOOL_OPTIONS:了解到Jib会使用这个变量
  • 在基础镜像和Jib配置中尝试多种ENTRYPOINT配置:
    • CMD ["/deployments/entrypoint.sh"]
    • ENTRYPOINT ["/deployments/entrypoint.sh"]
    • ENTRYPOINT ["/bin/sh", "-c", "/deployments/entrypoint.sh"]
    • ENTRYPOINT exec "/deployments/entrypoint.sh"
  • 在基础镜像中编写了自定义的entrypoint-ssl.sh脚本:
FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:1.17

RUN <<EOF cat >> /deployments/entrypoint-ssl.sh
#!/bin/bash
startup() {
  echo "Running custom entrypoint for trustStore"
  exec -a "${JAVA_APP_NAME}" java -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD} -Djavax.net.ssl.trustStore=${TRUSTSTORE} -cp "." -jar ${JAVA_APP_JAR} $*
}
#
startup $*
EOF
RUN chmod +x /deployments/entrypoint-ssl.sh

补充说明:ubi9镜像本身没有设置ENTRYPOINT,只配置了CMD:

CMD ["/opt/jboss/container/java/run/run-java.sh"] 
当前可行的临时方案
  • 方案a:直接在ENTRYPOINT中通过shell展开变量
    ENTRYPOINT ["/bin/sh", "-c", "echo ${TRUSTSTORE}"]
    
  • 方案b:在Jib中使用包含完整启动命令的ENTRYPOINT,通过shell展开变量
    entrypoint = ['/bin/sh', '-c','exec -a "${JAVA_APP_NAME}" java -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD} -Djavax.net.ssl.trustStore=${TRUSTSTORE} -cp "." -jar ${JAVA_APP_JAR} $*']
    
疑问
  1. 是否有办法在JAVA_TOOL_OPTIONS或JAVA_OPTS_APPEND中直接展开环境变量?
  2. 如果上述方法不可行,能否把方案b中的临时ENTRYPOINT逻辑移到基础镜像中?

内容的提问来源于stack exchange,提问作者Snedecor II

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:14:53