在exec模式下执行RUN指令

在一个Dockerfile中,RUN指令有两个formsshellexec

 # shell form RUN <command> # exec form RUN ["executable", "param1", "param2"] 

当使用shellforms时, <command>在shell中运行,并在其前面加上一个合适的shell(即: sh -c "<command>" )。 到目前为止,问题是:EXCEL如何工作? 如何执行命令而不使用shell? 我没有find一个令人满意的答案阅读官方文件。

命令的execforms使用与Docker用来运行shell本身的相同的OS系统调用来运行你的命令。 这只是做一个fork / exec的命名空间版本,linux用来运行任何进程。 shell自身提供了PATH处理,可变扩展,IOredirect以及其他脚本function,但这些并不是在操作系统级别运行进程所必需的。 这个问题可以帮助你理解Linux如何运行进程。

这看起来像一个docker文件。

使用RUN语法,这些命令将在para virtualised环境中一次运行一个命令,并为每个命令生成给定环境的默认shell(通常是Bash)。 sh -c是bash的“短手”,所以你实际上是在做同样的事情。

在shellforms中,该命令将在具有/ bin / sh -c的shell中运行

 RUN apt-get update 

Exec格式允许在没有/ bin / sh的映像中执行命令

 RUN [“apt-get”, “update”] 

shell表单更容易编写,而且您可以执行shell的variables分析•例如

 CMD sudo -u $(USER} java .... 

Exec表单不需要映像有一个shell。