我正在运行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/