当前位置: 首页 > 知识库问答 >
问题:

Shell和Exec表单中Dockerfile指令的区别

任云瀚
2023-03-14

shell和exec表单的区别是什么?

CMD

CMD python my_script.py arg

vs。

CMD ["python", "my_script.py", "arg"]

入口点

ENTRYPOINT ./bin/main

vs。

ENTRYPOINT ["./bin/main"]

RUN

RUN npm start

vs。

RUN ["npm", "start"]

Dockerfile指令?

共有1个答案

司马念
2023-03-14

shell表单和exec表单之间有两个区别。根据文档,exec表格是首选表格。这是两个区别:

exec表单被解析为JSON数组,这意味着您必须在单词周围使用双引号(“),而不是单引号(”)。

与shell表单不同,exec表单不调用命令shell。这意味着正常的shell处理不会发生。例如,CMD[“echo”,“$HOME”]不会对$HOME进行变量替换。如果需要shell处理,则可以使用shell表单或直接执行shell,例如:CMD[“sh”、“-c”、“echo$HOME”]。当使用exec表单并直接执行shell时,就像shell表单一样,执行环境变量扩展的是shell,而不是docker。

这里还有一些微妙之处:

exec表单可以避免shell字符串的mung,并可以使用不包含指定shell可执行文件的基本映像运行命令。

在shell表单中,您可以使用\(反斜杠)将单个RUN指令延续到下一行。

还有第三种形式的CMD

CMD[“param1”、“param2”](作为入口点的默认参数)

此外,如果要将exec表单用作要覆盖的ENTRYPOINT的参数/参数,则CMD需要exec表单。

 类似资料:
  • 命令的shell形式和exec形式是什么? 我浏览了几个文档,以便对shell窗体和exec窗体有一个清晰的了解。但在我看来一切都很混乱。有谁能帮忙弄清楚这两种形式有什么区别吗? ps:虽然我在查看docker文件指令()时遇到了这些术语,但我想知道它们之间的一般区别,而不是在docker上下文中。

  • 问题内容: docker RUN和CMD语句的shell形式和exec形式之间有什么区别? 例如: vs: eg2 : vs: 问题答案: Shell窗体和exec窗体之间有两个区别。根据文档,exec形式是首选形式。这是两个区别: exec形式被解析为JSON数组,这意味着您必须在单词而非单引号(’)周围使用双引号(“)。 与shell表单不同,exec表单不会调用命令shell。这意味着正常的

  • 我在docker文档上读到了如何使用ONBUILD指令,但一点也不清楚。 有人能给我解释一下吗?

  • 问题内容: 以下是我的“ Dockerfile”的内容 在此文件中,我期望“ VOLUME。/ usr / src / app”指令将主机上当前工作目录的内容安装在要安装在容器的/ usr / src / app文件夹中的主机中。 请让我知道这是正确的方法吗? 问题答案: 官方Docker教程说: 数据卷是一个或多个容器中的一个特别指定的目录,绕过联合文件系统。数据量为持久性数据或共享数据提供了几

  • 下面是我的“DockerFile”的内容

  • 问题内容: 我希望能够将Java应用程序中以字符串表示的许多连续命令发送到SSH服务器以执行。我应该使用: -要么- 问题答案: 使用shell通道启动外壳(在Unix上为sh或bash或类似的东西,在Windows上通常为cmd.exe)并创建控制台(如果在本地运行它们,则在屏幕上看到的内容)。您有一个提示,您可以将其解析或用于检测命令是否完成。 使用命令通道,将为每个命令启动一个shell实例