Shell 和 Exec 形式的 Dockerfile 指令之间的差异

2023-12-20

有什么区别shell and exec表格用于

CMD:

CMD python my_script.py arg

vs.

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

ENTRYPOINT:

ENTRYPOINT ./bin/main

vs.

ENTRYPOINT ["./bin/main"]

and RUN:

RUN npm start

vs.

RUN ["npm", "start"]

Dockerfile指示?


shell 形式和 exec 形式之间有两个区别。根据文档 https://docs.docker.com/engine/reference/builder/#run,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 字符串修改,并使用不包含指定 shell 可执行文件的基本映像来运行命令。

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

还有第三种形式CMD https://docs.docker.com/engine/reference/builder/#cmd:

CMD ["param1","param2"] (作为 ENTRYPOINT 的默认参数)

此外,还需要 exec 表单CMD如果您将其用作参数/参数ENTRYPOINT打算被覆盖。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell 和 Exec 形式的 Dockerfile 指令之间的差异 的相关文章

随机推荐

  • JSP表单日期输入字段

    我使用 Intellij 中的 Spring Web 应用程序创建了一个包含多个字符串的基本输入表单 仅使用字符串时 表单成功保存到后端 因此我决定在模型中添加一个日期字段 并尝试修改控制器 jsp 以在输入表单中接受此字段 并显示在记录列
  • 在 C++11 应用程序中记录错误的优雅方法?

    我正在开发一个小型 C 11 应用程序 一个 SDL2 游戏 并且我很难将一些面向对象的知识从 PHP Java 移植 到 C 例如 为了创建一个优雅的错误日志记录方法 我将创建一个包含各种适配器的类并在那里集中日志记录 我已经在 C 中做
  • Java Final 变量有默认值吗?

    我有一个这样的程序 class Test final int x printX Test System out println const called void printX System out println Here x is x
  • 使用 underscore.js 将两个(或多个)数组映射为一个

    我需要按元素添加几个数组 也就是说 我有几个长度相等的数组 并且我只需要一个具有相同数量的元素 即输入之和 的数组 Underscore 具有将所有元素折叠为一个并使用函数映射每个元素的方法 但我找不到任何方法将两个数组分段组合 如果我原来
  • 使用托管包框架实现语言服务

    我已按照演练中列出的步骤进行操作 http msdn microsoft com en us library bb166360 aspx http msdn microsoft com en us library bb166360 aspx
  • AWS CloudFormation 函数调用失败:Fn::ImportValue 不得依赖于任何资源、导入的值或 Fn::GetAZs

    我有一个云形成模板 mainVPC 它在 VPC 中创建几个子网并导出名称为 PrivateSubnetA PrivateSubnetB 的子网 我有一个不同的云形成模板来创建 DBSubnetGroup 如果用户不提供数据 我想使用 Pr
  • Pandas Dataframe 保存到 csv 文件

    我想知道如何将新的 pandas 系列保存到不同列的 csv 文件中 假设我有两个 csv 文件 它们都包含一列作为 A 我对它们做了一些数学函数 然后创建一个新变量作为 B 例如 data pd read csv filepath dat
  • 如何在java中进行批量http调用

    我正在尝试通过 Http 访问另一个服务以使用 HttpClient 获取数据 uri 应类似于端点 80 itemId 我想知道是否有办法进行批量调用来指定一组 itemId 我确实发现有人建议在创建请求时使用 setHeader Htt
  • register_shutdown_function 覆盖

    是否可以覆盖已经设置的register shutdown function堆 就像是 function f1 echo f1 function f2 echo f2 register shutdown function f1 echo ac
  • Python和MySQL打印结果

    我正在尝试自学 Python 但遇到了障碍 我需要从 MySQL 获取一个字段 但是当我从数据库检索数据时 结果很奇怪 这是我使用的下面的代码 cursor1 db cursor cursor1 execute select djname
  • Node.js 服务器只是不断加载,没有任何结果。

    我一直在尝试让我的服务器正常工作 但是当我发送发布数据时 它只是不断加载并且没有给出任何结果 这是我的 noen js 文件 var http require http var url require url Configure our H
  • 如何更改 Xcode 中 tableView 原型单元格的高度?

    我拖了一个UITableView到我的故事板中 我可以将信息完全插入其中 但为了定制单元 我添加了一个原型单元 当我手动更改它的高度时 模拟器中没有任何变化 对于那些只想在设计时更改行高的人 您可以选择 表视图单元格 然后在 大小 检查器中
  • 在 CSS 中绘制空的内联框?

    我确信这很简单 但我正在尝试画一组小的 空的 inlineHTML 中的框如下所示 span style border 1px solid black span 早些时候 我们制作了简单的 gif 图像 但随着浏览器显示的放大或缩小 图像看
  • 自定义无符号整数限制和翻转

    我目前需要 C 中的特殊数据类型 我需要数据类型是一个可以保存 0 151 之间值的整数 我已经知道我可以限制最小和最大频谱 但我希望它是一个翻转功能而不是限制钳位 有点像无符号整数在达到极限时如何回绕到 0 我不明白的一件事是如何处理溢出
  • 与 ContentEditable 一起使用的所见即所得编辑器是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 这是字面上的缺点的特定于实现的行为吗?

    我正在测试中的代码这个有趣的答案 https stackoverflow com a 6866155 768472 CL USER gt defun literal cons let cons 1 2 incf cdr cons cons
  • 如何强制GTM在中添加标签?

    我已按照以下步骤在我的网站内添加 AdSense 脚本 现在您已将代码转到 GTM 创建一个新标签 提供一个名字 选择自定义 HTML 作为标记模板 将代码复制并粘贴到文本字段中 将触发器设置为在所有页面或您想要投放广告的页面上触发 单击保
  • 如何使 Geolocation API 函数在 localhost file:// 上工作?

    我有这个基本代码来使用 Geolocation API 检索纬度和经度 显示地图 html
  • 如何在 Zeus Web 服务器中为移动用户代理重写 URL?

    我需要将具有移动用户代理的任何人重定向到名为 mobile php 的文件 我的网络托管提供商 Net Registry 使用 Zeus Web 服务器 这是我根据研究编写的脚本 RULE 1 START get the document
  • Shell 和 Exec 形式的 Dockerfile 指令之间的差异

    有什么区别shell and exec表格用于 CMD CMD python my script py arg vs CMD python my script py arg ENTRYPOINT ENTRYPOINT bin main vs