Dockerfile CMD不接受变量

Mor*_*enB 1 docker dockerfile

无法在CMD行上使用变量:

#CMD ["/opt/jdk/bin/java", "-jar", "${ARTIFACTID}-${VERSION}.${PACKAGING}"]
CMD ["/opt/jdk/bin/java", "-jar", "ssltools-domain-LATEST.jar"]
Run Code Online (Sandbox Code Playgroud)

最新的线路工作,而不是第一个.

任何帮助或解决方法非常感谢

lar*_*sks 6

将参数写入CMD(或ENTRYPOINT)作为JSON字符串时,如...

CMD ["/opt/jdk/bin/java", "-jar", "ssltools-domain-LATEST.jar"]
Run Code Online (Sandbox Code Playgroud)

...该命令直接使用exec系统调用执行,不由shell处理.这意味着没有i/o重定向,没有通配符处理......也没有变量扩展.您可以通过多种方式解决此问题:

  • 你可以把它写成一个普通的字符串,如:

    CMD /opt/jdk/bin/java -jar ${ARTIFACTID}-${VERSION}.${PACKAGING}
    
    Run Code Online (Sandbox Code Playgroud)

    当参数不是JSON构造时,它将被传递给sh -c.

  • 你可以按菲利普的建议去做,并将论点传递给sh -c你自己:

    CMD ["sh", "-c", "/opt/jdk/bin/java -jar ${ARTIFACTID}-${VERSION}.${PACKAGING}"]
    
    Run Code Online (Sandbox Code Playgroud)

    这两个选项基本相同.

  • 第三种选择是将所有内容放入shell脚本中,然后运行:

    COPY start.sh /start.sh
    CMD ["sh", "/start.sh"]
    
    Run Code Online (Sandbox Code Playgroud)

    如果您需要执行的不仅仅是简单的命令行,这将特别有用.