通过“CMD”行上的多个命令管道输出时,Dockerfile 中正确的 JSON 表示法语法?

2024-04-27

我正在运行 Docker 教程,并且 Dockerfile 包含以下行:

CMD /usr/games/fortune -a | cowsay

使用时hadolint为了检查文件,我得到了这个建议:

DL3025 Use arguments JSON notation for CMD and ENTRYPOINT arguments

所以我更新了CMD参数采用 JSON 表示法:

CMD ["/usr/games/fortune", "-a", "|", "cowsay"]

现在,在我(重新)构建图像并运行它之后,我收到以下错误:

(null)/|: No such file or directory

当我需要将输出从一个命令传输到另一个命令时,使用正确的 JSON 表示法语法的正确方法是什么?CMD line?


|是一个 shell 符号,仅在 shell 环境中工作。

CMD command param1 param2 (shell form)

这将按如下方式工作:CMD [ "sh", "-c", "command param1 param2"].

CMD ["executable", "param1", "param2"] (exec form, this is the preferred form)

这不会调用 shell,所以|将不起作用。

你可以参考一些东西here https://docs.docker.com/engine/reference/builder/#cmd.

对于您的情况,您需要使用 shell 来利用|所以正确的方法可能是这样的:

CMD ["bash", "-c", "/usr/games/fortune -a | cowsay"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过“CMD”行上的多个命令管道输出时,Dockerfile 中正确的 JSON 表示法语法? 的相关文章

随机推荐