我正在运行 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(使用前将#替换为@)