如何在每个“exec”命令处执行 Docker 映像的入口点?

2024-04-07

在尝试使用 Dockerspec 测试 Dockerfiles 后,我终于得到了an issue https://github.com/zuazo/dockerspec/issues/12我无法正确解决。

我认为问题出在 Docker 本身;如果我了解了它的过程入口点仅在运行时执行,但是如果容器保持启动状态并且我启动“exec”命令,则不会重新调用它。

我认为这是想要的行为。

但如果入口点是“gosu https://github.com/tianon/gosu“脚本位于我所有命令之前,这是一个问题......


Example

“myImage”有这个入口点:gosu 1000:1000 "$@"

如果我启动:docker run -it myImage id -u

输出是“1000”。

如果我启动一个容器:docker run -it myImage bash

在这个容器中,id -u输出“1000”。

但是,如果我在此容器中启动一个新命令,它会启动一个新 shell,并且不会执行入口点,因此:docker exec CONTAINER_ID id -u

输出“0”,因为新 shell 以“root”身份启动。


有没有办法在每次进入点时执行? 还是用shell重新打开?

或者更好的方法来做到这一点?

或者,也许我什么都没明白? ;)

Thanks !


EDIT

在阅读了这里提出的解决方案后,我明白问题不在于 Docker 如何工作,而在于 Serverspec 如何使用;我的目标是直接测试命令docker run参数,但 Serverspec 启动一个容器并测试命令docker exec.

所以,最好的解决方案是找到如何获取标准输出docker run由 Serverspec 执行。

但是,在我个人的用例中,最好的解决方案可能是不使用 Gosu,而是使用 --user 标志:)


如果您的目标是运行docker exec对于容器内的特定用户,您可以使用--user option.

docker exec --user myuser container-name [... your command here]

如果你想跑步gosu每次,您都可以将其指定为命令docker exec

docke exec container-name gosu 1000:1000 [your actual command here]

根据我的经验,将其封装成易于重复使用的内容的最佳方法是使用 .sh 脚本(或 Windows 中的 .cmd 文件)。

将其放入本地文件夹中的文件中...也许gs例如。

#! /bin/sh
docker exec container-name gosu 1000:1000 "$@"

给它执行权限chmod +x gs然后运行它./gs从本地文件夹

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

如何在每个“exec”命令处执行 Docker 映像的入口点? 的相关文章

随机推荐

  • TFS2018 是否仍支持 ISubscriber?

    截至 TFS 2017 Plugins 文件夹中有一个名为 Microsoft TeamFoundation Framework Server 的库 它包含 ISubscriber 接口 可以覆盖该接口以附加挂钩并添加事件行为 例如构建完成
  • Laravel 用户登录时如何设置会话变量

    发票应用程序开发正在使用 Laravel 进行 我为每个用户存储日期和金额格式settings table 当用户登录自己的帐户时如何设置Session多变的 请提出任何建议 我正在使用 Laravel 5 3 当然 文档告诉我们如何存储会
  • 未使用参数 ngrams

    我使用 Quanteda 进行文本分析 我使用这个命令 corp df2 lt tokens df text remove punct TRUE remove numbers TRUE remove symbols TRUE gt toke
  • XCode 4.4 iOS 5.1 模拟器问题

    我将我的 mac book 更新为 mountain lion 并将 Xcode 更新为 4 4 版本 在之前的版本中 我关闭 iOS 模拟器没有任何问题 并且 Xcode 自动停止构建过程 但现在如果我关闭 iOS 模拟器 Xcode 中
  • Scala:SeqT monad 转换器?

    如果我们有这样的两个函数 def findUserById id Long Future Option User def findAddressByUser user User Future Option Address 然后我们就可以使用
  • “关闭”某物是什么意思?

    我试图理解闭包 但从字面上看every我能找到的闭包定义使用了相同的神秘而模糊的短语 结束 什么是closure 哦 这是一个函数结束另一个功能 但我找不到 结束 的定义 有人能解释一下 A 事物 关闭 B 事物意味着什么吗 闭包是由代码指
  • 如何获取ECS集群的所有日志

    是否有一些 AWS 命令 get 可以从 ECS 集群的所有服务 任务中获取日志 就像是 aws ecs logs cluster dev or aws ecs describe clusters cluster dev logs 例如 必
  • 每周运行一次 php 脚本

    每个星期一我都需要清空 MYSQL 数据库的几个字段 首先 我考虑使用 cron 作业 但我的 Web 托管提供商 fatcow com 既不支持 SSH 也不支持通过命令行访问共享服务器 我还考虑过检查 date 以查看是否是星期一并执行
  • 从不规则时间序列创建规则 15 分钟时间序列

    我的 csv 文件中有一个不规则的时间序列 包含 DateTime 和 RainfallValue C SampleData csv DateTime RainInches 1 6 2000 11 59 0 1 6 2000 23 59 0
  • 树 /f cmd 修改日期。 Windows Powershell

    我需要创建一个 tree驱动器的文件夹 子文件夹和修改日期的列表 tree f命令效果很好 但我需要添加修改日期 我怎样才能做到这一点 它不会那么漂亮 但你可以使用 Recurse使用 Get ChildItem 选项来查找所有这些 此外
  • 是否可以使用 python-shell 包在 Node JS 中安装 python 包?

    我刚刚知道我们可以使用下面的 npm 包在 Node JS 中运行 Python 脚本 蟒蛇外壳 https www npmjs com package python shell 是否可以使用相同的库安装 python 包 就像是pip i
  • 自定义组件上的 OverlayTrigger 不起作用

    我试图在自定义组件 按钮 悬停时显示弹出窗口 class MyComponent extends React PureComponent
  • 如何避免页脚上的手风琴重叠

    我是 jQuery 新手 我正在使用手风琴 当我单击手风琴时 它会重叠在页脚上 我怎样才能避免它 下面是页脚的代码
  • 使用 mmap 访问 PCI-e 内存空间

    我在 Freescale MPC8308 处理器 基于 PowerPC 架构 上使用 PCI e 端口 在尝试使用它时遇到一些问题 端点 PCI e 设备的内存空间等于 256 MB 我可以使用 pciutils 包轻松读取和写入端点设备的
  • wxhaskell异步更新

    我正在使用 WxHaskell 以图形方式显示使用 TCP 通告状态更新的程序的状态 我使用 Data Binary 对其进行解码 当收到更新时 我想更新显示 所以我希望 GUI 能够异步更新其显示 我知道processExecAsync异
  • 如何强制在 DateTimeAxis 上显示特定日期

    是否可以强制在图表上显示网格线以及极端数据点的日期 我已经尝试了以下 Chart DateTimeAxis 属性的几乎所有配置 IntervalType Interval Minimum and Maximum但我对结果并不满意 设置属性M
  • B 树、数据库、顺序插入与随机插入以及速度。随机就是胜利

    EDIT Remus 纠正了我的测试模式 您可以在下面看到他的答案的更正版本 我采纳了用 DECIMAL 29 0 替换 INT 的建议 结果是 十进制 2133GUID 1836 即使行稍大一些 随机插入仍然获胜 尽管有解释表明随机插入比
  • 使用 SFINAE 检测成员函数 [重复]

    这个问题在这里已经有答案了 C 11中 判断一个类是否有成员函数size 您可以定义以下测试助手 template
  • 如何包含 Linux 头文件(如 linux/getcpu.h)?

    我在用着Linux 3 5 0 17 generic 28 Ubuntu SMP Tue Oct 9 19 31 23 UTC 2012 x86 64 GNU Linux 我需要 include
  • 如何在每个“exec”命令处执行 Docker 映像的入口点?

    在尝试使用 Dockerspec 测试 Dockerfiles 后 我终于得到了an issue https github com zuazo dockerspec issues 12我无法正确解决 我认为问题出在 Docker 本身 如果