什么在exec模式下执行RUN指令

时间:2017-04-13 11:03:26

标签: docker dockerfile

在Dockerfile中,RUN指令有两种形式shellexec

# shell form
RUN <command>

# exec form 
RUN ["executable", "param1", "param2"]

当使用shell形式时,<command>在shell中运行,在它前面加上一个合适的shell(即:sh -c "<command>")。 到目前为止这么好,问题是:exec如何形成工作?如何在没有shell的情况下执行命令我没有找到令人满意的答案阅读官方文件。

3 个答案:

答案 0 :(得分:1)

该命令的exec形式使用与Docker用来运行shell本身相同的OS系统调用来运行您的命令。它正在执行linux用来运行任何进程的fork / exec的命名空间版本。 shell本身是一种便利,提供PATH处理,可变扩展,IO重定向和其他脚本功能,但在操作系统级别运行进程并不需要这些功能。 This question可以帮助您了解Linux如何运行流程。

答案 1 :(得分:0)

这看起来像一个泊坞文件。

使用RUN语法,命令将在para虚拟化环境中一次运行一个命令,并且将为每个命令生成给定环境(通常为Bash)的默认shell。 sh -c是&#34;简写&#34;因为bash所以你实际上在做同样的事情。

答案 2 :(得分:0)

在shell形式中,该命令将在/ bin / sh -c

的shell中运行
RUN apt-get update

Exec格式允许在没有/ bin / sh

的图像中执行命令
RUN [“apt-get”, “update”]

shell表单更容易编写,您可以执行变量的shell解析 •例如

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

•Exec表单不需要图像有shell。