在exec模式下执行RUN指令
在一个Dockerfile中,RUN指令有两个formsshell
和exec
:
# 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。