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

如何在Dockerfile CMD命令中传递含空格的JVM属性参数

问题根源

启动失败本质是shell变量无引号展开时的分词问题:未加引号的$JAVA_OPTS在shell执行阶段会被按空格拆分为多个独立参数,原本完整的Kafka SASL配置参数会被切割成多个不合法的JVM参数,导致启动异常。

解决方案

方案1:保留环境变量动态传参能力(推荐)

修改CMD指令,给$JAVA_OPTS包裹双引号即可,注意JSON数组内的双引号需要用反斜杠转义:
CMD ["sh", "-c", "java \"$JAVA_OPTS\" -jar xxx.jar"]

如果是在Dockerfile中直接定义该参数到ENV,写法如下即可,ENV会自动保留参数内的空格:

ENV JAVA_OPTS="-Dproducer.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username=xxx password=pass;"
CMD ["sh", "-c", "java \"$JAVA_OPTS\" -jar xxx.jar"]

运行容器时动态传参也遵循同样规则,给环境变量值外层加双引号即可:
docker run -e JAVA_OPTS="-Dproducer.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username=xxx password=pass;" 你的镜像名

方案2:参数固定时用exec形式CMD

如果不需要动态调整JVM参数,可以直接用exec形式的CMD,不需要shell解析,参数空格会被完整保留:
CMD ["java", "-Dproducer.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username=xxx password=pass;", "-jar", "xxx.jar"]

内容的提问来源于stack exchange,提问作者H.Ç.T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:48:05