如何使用 Docker 获取入口点脚本?

2023-11-24

我有一个 Docker 镜像,我可以运行它:

docker run -it --entrypoint="/bin/bash" gcr.io/docker:tag

然后我可以通过以下方式获取脚本:

root@86bfac2f6ccc:/# source entrypoint.sh

该脚本看起来像这样:

more entrypoint.sh
#!/bin/bash
. /env.sh
. /root/miniconda3/etc/profile.d/conda.sh
conda activate base
exec "$@"

激活基础环境:

(base) root@86bfac2f6ccc:/#

到目前为止一切顺利,但我没有设法将其包含在Dockerfile或作为参数docker run:

我尝试了很多事情:

例如:

docker run -it --entrypoint="/bin/bash"  gcr.io/docker:tag  source entrypoint.sh
/bin/bash: source: No such file or directory

但脚本存在并且可以执行:

docker run -it --entrypoint="/bin/ls"  gcr.io/docker:tag -la
...
-rwxr-xr-x  1 root root   94 Apr 26 20:36 entrypoint.sh
...

Or:

docker run -it --entrypoint="/bin/bash"  gcr.io/docker:tag  ". /entrypoint.sh"
/bin/bash: . /entrypoint.sh: No such file or directory

或者在 Docker 文件中:

ENTRYPOINT ["source", "/entrypoint.sh"]

我想我遇到的问题可能与以下事实有关source在当前 shell 中评估脚本。

有什么指导可以实现我想要的吗?这看起来很明显,但我不知道。


当Docker启动一个容器时,有两个部分,“入口点”和“命令”。当两者都指定时,“命令”部分将作为命令行参数传递给“入口点”部分。

特别是,您显示的脚本具有非常典型的入口点脚本模式:

#!/bin/sh
# ... do some setup ...
# then run the CMD passed as command-line arguments
exec "$@"

如果您的 Dockerfile 将此脚本命名为ENTRYPOINT然后你想传递你想要运行的命令作为“命令”部分。如果你像这样运行你的 shell

docker run --rm -it gcr.io/docker:tag sh

then sh将被传递到入口点脚本,该脚本将进行设置并最终运行它。

(记住source是特定于供应商的扩展,在许多 shell 中都不存在,例如 Alpine 基础映像使用的最小 BusyBox shell,但是.含义相同,并且包含在 POSIX 标准中。由于容器仅运行一个进程,因此该进程“获取此文件”也没有任何意义;它会设置一些环境变量,然后容器就会退出。入口点模式进行设置,然后运行主容器命令。)

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

如何使用 Docker 获取入口点脚本? 的相关文章

随机推荐

  • 所有对最大流量

    给定一个有向加权图 如何找到最大流量 or 最小切边 在所有顶点对之间 天真的方法就是简单地调用Max Flow像 Dinic 的算法 其复杂度为O V 2 E 对于每对 因此对于所有对来说都是O V 4 E 是否可以将复杂度降低到O V
  • 如何从 .env 文件设置环境变量

    假设我有 env 文件包含如下行 USERNAME ABC PASSWORD PASS 与正常人不同的是export前缀 所以我无法直接获取文件 创建从 env 文件加载内容并将其设置为环境变量的 shell 脚本的最简单方法是什么 如果您
  • R (purrr) 展平命名列表以列出并保留名称

    也许我遗漏了一些明显的东西 但试图将 R 中的命名列表的命名列表 甚至可能更加嵌套 扁平化为最终一个平面列表 purrr and rlist似乎有这方面的工具 我怎样才能实现子列表的名称成为扁平化结果列表的名称预加密 例如list1 bli
  • 在主对话框中嵌入对话框并通过 MFC 中的按钮单击进行切换

    我有一个如下的设计 所以基本上 我想在应用程序主对话框中嵌入三个对话框并在它们之间切换 对于每个按钮单击 即按钮 1 将显示对话框 1 按钮 2 将隐藏对话框 1 并显示对话框 2 等等 每个对话框都有不同的设计和功能 我尝试使用 CPro
  • 为什么 std::regex_iterator 会导致此数据堆栈溢出?

    我一直在使用std regex iterator解析日志文件 我的程序已经工作了好几个星期 并且已经解析了数百万条日志行 直到今天 当今天我对日志文件运行它并得到堆栈溢出时 事实证明 只有日志文件中的一个日志行导致了问题 有谁知道为什么我的
  • 自从最近引入登录审核以来,我如何测试 Facebook 应用程序?

    我正在开发一个 Facebook 应用程序 它通过 API 调用来获取用户事件列表 该应用程序将使用 Javascript 来调用用户 事件边缘 如下所示 FB api user id events function response if
  • Powershell 中加号 (+) 的特殊使用

    除了其自然用法 即两个参数相加 之外 您还可以使用加号 登录 Powershell 进行特殊调用 如下所示 System Net WebRequestMethods Ftp UploadFile UploadFile是一个公共静态字段 根据
  • C#:以编程方式在工作表范围内创建“命名范围”

    我们如何创建一个 命名范围 其范围设置为工作表 因为我们可以从 Excel 手动执行此操作 所以我想有一种方法可以在代码中执行此操作 使用 设置名称Range Name 属性创建一个工作簿范围的命名范围 我尝试在范围名称前添加 前缀按照建议
  • 在 pandas MultiIndex DataFrame 中选择行

    选择 过滤行的最常见的 pandas 方法是什么索引为 MultiIndex 的数据帧 基于单个值 标签的切片 基于来自一个或多个级别的多个标签进行切片 过滤布尔条件和表达式 哪些方法适用于哪些情况 为简单起见假设 输入数据帧没有重复的索引
  • 在 Microsoft Edge 中使用 @font-face

    我在这里处理一个奇怪的问题 当我使用 font face 时 Microsoft Edge 浏览器似乎不加载字体 我检查了所有运行 Windows 10 和 Microsoft Edge 的计算机 我检查了http caniuse com
  • 核心数据 - 在 Group By 中使用瞬态属性

    我正在创建一个带有一些聚合数据的 UITableView 在此过程中 需要使用节标题对表视图单元格进行排序和分组 问题是我想在 NSFetchRequest 中使用瞬态属性来生成节标题和结果排序 问题是 在设置 NSFetchRequest
  • phoneGap Cordova 中的命令行失败,退出代码为 8

    我正在尝试从phonegap 和cordova 开始 我按照以下步骤http phonegap com install 但在命令下 phonegap run android在命令提示符下我收到以下错误 Command line failed
  • Fancy Box - 关闭 iframe 弹出窗口时如何刷新父页面?

    我希望当我关闭 Fancy Box 弹出框架时刷新我的父页面 我在弹出窗口中有一个登录页面 因此我需要刷新父页面以在 Fancy Box 关闭时显示新的登录状态 我可以让它在没有 iFrame 代码的情况下工作 但我无法让它与 iFra
  • 获取列名的 LINQ 成员表达式

    Hello 我正在将 LINQ 和 EF 与 C 4 0 一起使用 我已将基本的 ELMAH 表拖入 EF 多次构建和保存 一切都如人们所期望的那样进行 但尝试过于雄心勃勃 需要一点帮助 我试图从作为变量传入的表达式中获取列名称 我想要的是
  • 如何查找Java + JNI + C++进程中的内存泄漏

    我有一个用 java 编写的项目 使用 JNI 使用 C 库 所有的代码都是我们写的 所以我有所有的源代码 几个小时后 机器内存不足 尽管我的进程只是迭代文件 并且删除了与前一个文件相关的所有内存 我确信存在内存泄漏 通常我使用Valgri
  • 用于搜索专利数据库(即 USPTO 或 EPO)的 Python 模块

    对于我的工作 我必须寻找生物医学研究和工业领域的潜在客户 我使用模块 biopython 编写了一些非常方便的程序 它有一个很好的用于搜索 NCBI 的界面 我还使用了 Clinical Trials 模块来搜索 ClinicalTrial
  • 如何使用 JSDoc3 记录嵌套命名空间

    我在使用 JSDoc3 记录按照这些方式构建的代码时遇到问题 namespace MyNamespace MySubNamespace function MyNamespace MyNamespace MySubNamespace Foo
  • R 中发现的任何错误都会响应 Error in app$vspace(new_style$`margin-top` %||% 0) : attempts to apply non-function

    老实说 我不知道如何使其可重现 使用 tidyverse 在 R 中发生的任何错误都会抛出 Error in app vspace new style margin top 0 attempt to apply non function 还
  • Python asyncio 不显示任何错误

    我正在尝试使用 asyncio 从数千个网址中获取一些数据 以下是设计的简要概述 填写一个Queue使用一个单一的一次性处理一堆网址Producer 产生一堆Consumers Each Consumer保持异步地从 中提取 urlQueu
  • 如何使用 Docker 获取入口点脚本?

    我有一个 Docker 镜像 我可以运行它 docker run it entrypoint bin bash gcr io docker tag 然后我可以通过以下方式获取脚本 root 86bfac2f6ccc source entry