我正在运行Docker教程,并且Dockerfile包含以下行:
CMD /usr/games/fortune -a | cowsay
使用hadolint整理文件时,我得到以下建议:
DL3025 Use arguments JSON notation for CMD and ENTRYPOINT arguments
因此,我使用参数的JSON表示法更新CMD行:
CMD ["/usr/games/fortune", "-a", "|", "cowsay"]
现在,在我(重新)构建镜像并运行它之后,出现以下错误:
(null)/|: No such file or directory
当我需要将一个命令的输出通过管道传递到CMD行上的另一个命令时,使用正确的JSON表示法的正确方法是什么?

最佳答案

|是一个 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中的内容。

对于您的情况,您需要使用shell来利用|,因此正确的方法可能是这样的:
CMD ["bash", "-c", "/usr/games/fortune -a | cowsay"]

关于docker - 通过 `CMD`行上的多个命令传递输出时,Dockerfile中的JSON表示法是否正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52920860/

10-16 22:36