gpt4 book ai didi

Dockerfile CMD 不接受变量替换

转载 作者:行者123 更新时间:2023-12-02 08:46:11 26 4
gpt4 key购买 nike

无法在 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"]

    如果您需要执行的不仅仅是简单的命令行,这尤其有用。

关于Dockerfile CMD 不接受变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com