具有环境变量和可重写 CMD 的 ENTRYPOINT

2023-12-25

这允许$ENV_VAR传递给foo

ENTRYPOINT /usr/bin/foo $ENV_VAR

这不会,因为传递的是文字字符串“$ENV_VAR”,而不是环境变量的内容。

ENTRYPOINT ["/usr/bin/foo", "$ENV_VAR"]

这允许覆盖 CMD

ENTRYPOINT ["/usr/bin/foo"]
CMD ["--some-flag"]

这不允许 CMD 到达入口点。它appears在两个单独的命令中运行它。 IE:sh /usr/bin/foo && sh --some-flag

ENTRYPOINT /usr/bin/foo
CMD --some-flag

如何创建使用环境变量并具有可重写 CMD 的 ENTRYPOINT?最好采用如下形式

注意:这不起作用

ENTRYPOINT ["/usr/bin/foo", "$ENV_VAR"]
CMD ["--some-flag"]

注意:这不起作用

ENTRYPOINT ["/usr/bin/foo", "$ENV_VAR"]
CMD ["--some-flag"]

这将运行 foo$ENV_VAR作为第一个参数和--some-flag作为第二个参数。你想要的是$ENV_VAR转换为环境变量值,这是由 shell 完成的。 ENTRYPOINT/CMD 的 json 语法显式禁用 shell,因此由您的可执行文件扩展该值。


如果您尝试使用以下命令将 ENTRYPOINT 更改为 shell 语法:

ENTRYPOINT /usr/bin/foo "$ENV_VAR"
CMD ["--some-flag"]

你会发现 docker 将其转换为运行:

/bin/sh -c "/usr/bin/foo \"$ENV_VAR\"" "--some-flag"

如果您查看有关的文档-c选项,你会发现这只需要一个参数。所以这个选项不适用于--some-flag在引号之外传递的选项。


最简单的解决方案是将其移至 shell 脚本:

#!/bin/sh
exec /usr/bin/foo "$ENV_VAR" "$@"

将其作为 Entrypoint.sh 复制到您的容器中:

COPY entrypoint.sh /
RUN chmod 755 /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["--some-flag"]

请注意,仅当您无法使脚本在所有构建主机/代码存储库上可执行时才需要 chmod 命令(有时在 Windows 用户中会看到)。

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

具有环境变量和可重写 CMD 的 ENTRYPOINT 的相关文章

随机推荐

  • VSTS 登录失败,出现 401 未授权 - [用户] 有多个与其关联的帐户

    我尝试让域中的新用户访问我们的 VSTS 我们通过 MPN 订阅 MSDN 企业版 如果用户使用其工作帐户登录 my visualstudio com 则订阅已分配且对用户可见 如果用户尝试访问 ourprojects visualstud
  • Clojure 单元测试。如何测试函数是否抛出异常?

    我看到有一种方法可以测试函数是否抛出类 C 的异常 但是有没有一种方法可以测试函数是否抛出任何异常 或者断言它不应该抛出异常 对于预计不会出现异常的测试 请按正常方式编写测试 任何抛出的异常都会导致测试失败 对于可能引发任何异常的测试 请使
  • Android 资源 ID 突然不是最终的,字段无法解析

    我正在开发一个新旧项目 我正在为不同的国家 地区市场制作它 当我从旧项目复制代码时 它显示一些错误 例如迁移 ANDROID 代码 从 ADT 14 开始 资源字段不能用作 switch case 这种情况发生在 strings xml 文
  • 如何在 Ruby 中创建 OpenGL 3.x 或 4.x 上下文?

    我到处都找过了 但没有任何 ruby 绑定可以允许创建 OpenGL 3 4 上下文 它不必是完整的 OpenGL 绑定库 只需创建 OpenGL 上下文的部分即可 更新 如果我足够绝望 我会用 ruby ffi 进行部分 glfw rub
  • 位置:固定边距:IE9/10 中自动

    我为响应式网站制作了一个粘性标题 其中标题也以margin 0 auto 它适用于 Chrome Firefox Safari IE8 但不适用于 IE9 最小标记 div class viewport div
  • 如何在微控制器上运行opencv?

    我对电子领域和控制器了解很多 但我想知道如何将opencv程序与红色交通灯结合起来 我知道答案是微控制器 但我只知道有一个编译器AVR 它可以将C编译为十六进制 然后与微控制器一起工作 但 OpenCV 我想我不会在 C 上运行 是高级别的
  • 动画选择器/状态转换

    我的 ListView 有一个简单的选择器
  • 将 Visual Studio 项目文件解析为 XML

    使用动态 xml 解析器 我尝试将 VS 项目文件作为 XElement 加载 这是项目文件的精简版本
  • 如何将数据从blob存储复制到VM?

    是否可以将 Azure Blob 存储中存在的文件复制到 Azure 虚拟机 在浏览了 Azure 数据工厂文档后 数据管理网关似乎提供 文件系统 作为数据接收器 但我无法找到任何相关文档 教程 谁能告诉我这是否可能吗 如果可以的话 可以怎
  • 将 HTML 画布裁剪为其可见像素(内容)的宽度/高度?

    可以 HTMLcanvas元素被内部裁剪以适应其内容 例如 如果我有一个 500x500 像素的画布 其中的随机位置只有一个 10x10 像素的正方形 是否有一个函数可以通过扫描可见像素和裁剪将整个画布裁剪为 10x10 Edit 这被标记
  • 如何在黑莓应用程序中显示饼图[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何使用 rim api 在黑莓应用程序中显示饼图 rim api 中是否有可用的控件或者如何实现 有人可以通过分享代码片段来帮助我吗 Go
  • 旋转后找到矩形的顶点

    所以我承认我真的不知道如何表达这个问题 但完整的解释应该有助于阐明一些情况 这是我所知道的 我在 HTML5 Canvas 上绘制了一个矩形 我知道所有 4 个角的点以及宽度和高度 由此我可以计算出中点 我想知道的是 如果我将矩形旋转 n
  • iptables 阻止本地连接到 mongodb

    我有一个带有 mongodb 2 0 4 的虚拟机 Ubuntu 12 04 4 LTS 我想用 iptables 限制它只接受 SSH 输入 输出 而不接受其他任何东西 这就是我的设置脚本设置规则的方式 bin sh DROP every
  • 使用区间来分配分类值

    获取以下通用数据 A lt c 5 7 11 10 23 30 24 6 B lt c 1 2 3 1 2 3 1 2 C lt data frame A B 以及以下间隔 library intervals interval1 lt In
  • 一列中的多个图表区域

    I have a chart with multiple chart areas When I press a button a new chart area is being created etc My problem is that
  • 当一列中的单元格与另一列中的单元格不匹配时更改它们的颜色

    我想检查一列中的值是否与另一列中的值相同 每当值不相同时 我想更改这些单元格的颜色 例如 I 栏 AA 栏 两者的值都是从 1318 年到 1500 年的第一个月 阿拉伯历 但我想检查其中哪些值不匹配 例如用黄色将它们着色 在这种情况下 第
  • 信息检索中的语言模型

    我在 IR 工作 任何人都可以指导我 我该如何实现语言模型Whoosh 我已经应用了TD IDF和BM25 我是红外新手 例如 最简单形式的语言模型只是丢弃所有条件上下文 并独立估计每个术语 这样的模型称为一元语言模型 P uni t 1t
  • Ubuntu 20.04升级,Python缺少libffi.so.6

    我最近将操作系统升级到 Ubuntu 20 04 LTS 现在 当我尝试在 Python 中导入 Numpy 等库时 出现以下错误 ImportError libffi so 6 cannot open shared object file
  • 在 ASP.NET 中模拟会员用户

    在一个通用的asp net网站与Membership Roles并启用哈希密码 我想向管理员提供impersonation以便他们可以浏览该网站that用户会的 该网站应该像该用户登录一样运行 然后能够恢复到他们自己的登录状态 实现这一目标
  • 具有环境变量和可重写 CMD 的 ENTRYPOINT

    这允许 ENV VAR传递给foo ENTRYPOINT usr bin foo ENV VAR 这不会 因为传递的是文字字符串 ENV VAR 而不是环境变量的内容 ENTRYPOINT usr bin foo ENV VAR 这允许覆盖