无法在CMD命令行中使用变量:
#CMD ["/opt/jdk/bin/java", "-jar", "${ARTIFACTID}-${VERSION}.${PACKAGING}"]
CMD ["/opt/jdk/bin/java", "-jar", "ssltools-domain-LATEST.jar"]
最新的代码行有效,而第一行无效。
非常感谢任何帮助或解决方法。
无法在CMD命令行中使用变量:
#CMD ["/opt/jdk/bin/java", "-jar", "${ARTIFACTID}-${VERSION}.${PACKAGING}"]
CMD ["/opt/jdk/bin/java", "-jar", "ssltools-domain-LATEST.jar"]
最新的代码行有效,而第一行无效。
非常感谢任何帮助或解决方法。
当您将参数写成JSON字符串形式传递给CMD
(或ENTRYPOINT
)时,例如...
CMD ["/opt/jdk/bin/java", "-jar", "ssltools-domain-LATEST.jar"]
...该命令直接使用 exec
系统调用执行,而不会通过 shell 处理。这意味着没有 I/O 重定向、通配符处理以及变量扩展。您可以通过多种方式解决此问题:
您可以直接将其作为纯字符串编写,例如:
CMD /opt/jdk/bin/java -jar ${ARTIFACTID}-${VERSION}.${PACKAGING}
当参数不是JSON结构时,它会被传递给sh -c
。
你可以像Philip建议的那样,自己将参数传递给sh -c
:
CMD ["sh", "-c", "/opt/jdk/bin/java -jar ${ARTIFACTID}-${VERSION}.${PACKAGING}"]
这两个选项基本上是相同的。
第三个选项是将所有内容放入一个 shell 脚本中,然后运行它:
COPY start.sh /start.sh
CMD ["sh", "/start.sh"]
如果你需要执行的不仅仅是简单的命令行,那么这将特别有用。
首先尝试一下这个小技巧:
CMD ["sh", "-c", "/opt/jdk/bin/java -jar ${ARTIFACTID}-${VERSION}.${PACKAGING}"]
ARG PACKAGING=jar ENV PACKAGING=${PACKAGING}
- MortenB