gpt4 book ai didi

docker - 通过 `CMD` 行上的多个命令管道输出时,Dockerfile 中的正确 JSON 符号语法?

转载 作者:行者123 更新时间:2023-12-02 18:46:22 31 4
gpt4 key购买 nike

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

CMD/usr/games/fortune -a |牛赛

当使用 hadolint 对文件进行 lint 时,我得到了这个建议:

DL3025 对 CMD 和 ENTRYPOINT 参数使用参数 JSON 表示法

所以我用参数的 JSON 符号更新了 CMD 行:

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

现在,在我(重新)构建图像并运行它之后,我得到了这个错误:

(null)/|: 没有那个文件或目录

当我需要在 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/

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