【问题标题】:Docker CMD exec-form for multiple command execution用于执行多个命令的 Docker CMD exec-form
【发布时间】:2017-10-17 18:58:16
【问题描述】:

这是一个通过 shell-form 中的CMD 指令运行多个命令的愚蠢示例。我更喜欢使用 exec-form,但我不知道如何连接指令。

外壳形式:

CMD mkdir -p ~/my/new/directory/ \
 && cd ~/my/new/directory \
 && touch new.file

执行形式:

CMD ["mkdir","-p","~/my/new/directory/"]
# What goes here?

有人可以在 exec-form 中提供等效的语法吗?

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    简短的回答是,您不能将 执行形式中的命令链接在一起。

    && 是shell 的一个函数,用于将命令链接在一起。事实上,当您在 Dockerfile 中使用此语法时,您实际上是在利用 shell 功能。

    如果您想使用 exec 形式 拥有多个命令,那么您必须使用 exec 形式 来调用 shell,如下所示...

    CMD ["sh","-c","mkdir -p ~/my/new/directory/ && cd ~/my/new/directory && touch new.file"]
    

    【讨论】:

    • sh 初始命令是我忘记预先挂起的 - exec 表单不采用或使用 SHELL
    • 尽管推荐使用 exec 形式,但在这种情况下,与 OP 的 shell 形式相比,我只能看到 缺点 i>: 1. 您必须明确指定外壳,2. 您必须注意可能转义的引号,3. 您不能将其拆分为多行以便于阅读。还有什么优势吗?尽管这只是最佳实践?
    【解决方案2】:

    我认为这些命令应该在 RUN 步骤而不是 CMD 处执行。

    RUN  mkdir -p ~/my/new/directory/ && \
         cd ~/my/new/directory && \
         touch new.file
    

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 1970-01-01
      • 2014-12-12
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 2016-09-06
      相关资源
      最近更新 更多