tini

2025-12-11 0 885

tini容器的微小但有效的init

tini是您可以想到的最简单的init

tini所做的就是产生一个孩子( tini打算在容器中运行),并等待它在收集僵尸并执行信号转发的同时退出。

为什么tini ?

使用tini有几个好处:

  • 它可以保护您免受意外创建僵尸过程的软件,该软件可以(随着时间的流逝!)饿死您的整个系统(并使其无法使用)。
  • 它确保默认信号处理程序可用于您在Docker映像中运行的软件。例如,使用tini , SIGTERM可以正确终止您的过程,即使您没有明确安装信号处理程序。
  • 它确实如此透明!无tini起作用的Docker图像将与tini合作而不会进行任何更改。

如果您想了解有关为什么有用的更多详细信息,请查看此问题讨论: tini的优势是什么?

使用tini

注意:如果您使用的是Docker 1.13或更高的时间, tini本身包含在Docker本身中。这包括所有版本的Docker CE。要启用tini ,只需将--init标志传递到docker run即可。

注意:有可用于tini预制码头图像。如果您当前使用Ubuntu或CentOS图像作为基础,则可以将其中一个用作置换式替代品。

注意:有用于高山Linux和Nixos的tini软件包。有关安装说明,请参见下文。

将tini添加到您的容器中,并使其可执行。然后,只需调用tini ,然后将您的程序及其论点作为论点传递给tini 。

在Docker中,您将需要使用入门点,因此您不必记住手动调用tini :

tini
ENV tini _VERSION=v0.19.0
ADD https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini / tini
RUN chmod +x / tini
ENTRYPOINT [\”/ tini \”, \”–\”]

# Run your program under tini
CMD [\”/your/program\”, \”-and\”, \”-its\”, \”arguments\”]
# or docker run your-image /your/program …\”>

 # Add tini
ENV tini _VERSION=v0.19.0
ADD https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini / tini
RUN chmod +x / tini
ENTRYPOINT [\"/ tini \", \"--\"]

# Run your program under tini
CMD [\"/your/program\", \"-and\", \"-its\", \"arguments\"]
# or docker run your-image /your/program ...

请注意,您可以跳过--在某些条件下,但您也可以始终将其包含在安全的情况下。如果您看到一条看起来像tini : invalid option -- \'c\' ,则需要添加--

在下面的示例中,应像-v一样传递tini本身的论点: / tini -v -- /your/program

注意:上面链接的二进制是一个64位动态链接的二进制。

签名的二进制文件

使用密钥595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7签署tinitini -static二进制文件。

您可以使用gpg验证其签名(您可以使用软件包管理器安装):

tini_VERSION v0.19.0
ADD https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini / tini
ADD https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini .asc / tini .asc
RUN gpg –batch –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \\
&& gpg –batch –verify / tini .asc / tini
RUN chmod +x / tini \”>

 ENV tini _VERSION v0.19.0
ADD https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini / tini
ADD https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini .asc / tini .asc
RUN gpg --batch --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \\
 && gpg --batch --verify / tini .asc / tini
RUN chmod +x / tini

通过校验和验证二进制

tinitini -static二进制文件产生了校验和( SHA1SHA256 )。

您可以使用sha1sumsha256sum验证他们的校验和(您可以使用软件包管理器安装):

tini_VERSION v0.19.0
RUN wget –no-check-certificate –no-cookies –quiet https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini -amd64 \\
&& wget –no-check-certificate –no-cookies –quiet https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini -amd64.sha256sum \\
&& echo \”$(cat tini -amd64.sha256sum)\” | sha256sum -c\”>

 ENV tini _VERSION v0.19.0
RUN wget --no-check-certificate --no-cookies --quiet https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini -amd64 \\
    && wget --no-check-certificate --no-cookies --quiet https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini -amd64.sha256sum \\
    && echo \"$(cat tini -amd64.sha256sum)\" | sha256sum -c

高山Linux软件包

在Alpine Linux上,您可以使用以下命令安装tini :

tini
# tini is now available at /sbin/ tini
ENTRYPOINT [\”/sbin/ tini \”, \”–\”]\”>

 RUN apk add --no-cache tini
# tini is now available at /sbin/ tini
ENTRYPOINT [\"/sbin/ tini \", \"--\"]

尼克斯

使用NIX,您可以使用以下命令安装tini :

 nix-env --install tini

Debian

在Debian(Buster或更新)上,您可以使用以下命令安装tini :

 apt-get install tini

请注意,此安装/usr/bin/ tini (和/usr/bin/ tini -static ),而不是/ tini

Arch Linux

在Arch Linux上,AUR上有一个包装。使用官方说明安装或使用AUR助手:

 pacaur -S tini

其他平台

提供手臂和32位二进制文件!您可以在“版本”选项卡下找到可用的二进制文件的完整列表。

选项

冗长

-v参数可用于额外的详细输出(您最多可以将其传递3次,例如-vvv )。

子股

默认情况下, tini需要以PID 1的速度运行,以便它可以收获僵尸(通过以PID 1运行,僵尸将重新分配给tini )。

如果出于某种原因,您不能以PID 1的形式运行tini ,则应通过以下方式注册tini作为一个过程(仅在Linux> = 3.4)中。

  • -s论点传递给tini ( tini -s -- ...
  • 设置环境变量tini _SUBREAPER (例如export tini _SUBREAPER= )。

这将确保尽管tini并未以PID 1的速度运行,但僵尸将重新分配给tini 。

注意:如果tini检测到它没有以PID 1的形式运行并且未注册为子育,则将发出警告。如果您看不到警告,那就很好。

重新映射出口代码

tini在退出时会重复使用孩子的退出代码,但偶尔,这可能不是您想要的(例如,如果您的孩子在收到Sigterm后143次退出)。值得注意的是,这可能是Java应用程序的问题。

在这种情况下,您可以使用-e标志将任意退出代码重新映射到0。如果需要,可以多次传递标志。

例如:

 tini -e 143 -- ...

过程组杀戮

默认情况下, tini仅杀死其直接的儿童进程。如果向该过程发送信号没有所需的效果,这可能是不便的。例如,如果您这样做

 docker run --rm krallin/ubuntu- tini sh -c \'sleep 10\'

和Ctrl-c,什么也没有发生:Sigint被发送到“ SH”过程,但是当它在等待“睡眠”完成时,该外壳不会对其做出反应。

您可以配置tini以杀死子进程组,以便组中的每个过程都通过以下任一。

  • -g论点传递给tini ( tini -g -- ...
  • 设置环境变量tini _KILL_PROCESS_GROUP (例如export tini _KILL_PROCESS_GROUP= )。

这更接近地对应于您在终端中进行CTRL-C等时发生的情况:信号发送到前景过程组。

tini -g — sh -c \’sleep 10\’\”>

 docker run --rm --entrypoint tini krallin/ubuntu- tini -g -- sh -c \'sleep 10\'

父母死亡信号

tini可以设置其母体死亡信号,这是tini父母退出时应收到的信号。要设置父人死亡信号,请使用带有信号tini的名称的-p标志在其父母退出时应收到的信号:

 tini -p SIGTERM -- ...

注意:请参阅此公关讨论,以了解有关父母死亡信号和用例的更多信息。

更多的

现有的入口点

tini也可以与容器中的现有入口点一起使用!

假设您的入口点是/docker-entrypoint.sh ,那么您将使用:

 ENTRYPOINT [\"/ tini \", \"--\", \"/docker-entrypoint.sh\"]

静态链接版本

tini的依赖项很少(仅取决于LIBC),但是如果您的容器无法启动,则可能需要考虑使用静态构建版本:

tini -static / tini \”>

 ADD https://*github.co**m/krallin/tini/releases/download/${ tini _VERSION}/ tini -static / tini

尺寸注意事项

tini是一个很小的文件(在10KB范围内),因此它不会为您的容器增加太大的重量。

静态链接的版本更大,但仍然<1m。

建造tini

如果您不想下载二进制文件,则可以通过运行cmake . && make来构建tini 。 cmake . && make

在构建之前,您可能还想运行:

 export CFLAGS=\"-DPR_SET_CHILD_SUBREAPER=36 -DPR_GET_CHILD_SUBREAPER=37\"

这样一来,即使您是在具有旧Linux内核标头的系统上构建的(<3.4), tini也会以儿童亚品为支持。如果您要与Docker一起使用tini ,这通常是您想要的(如果您的主机内核支持Docker,它也应支持子族子派生)。

了解tini

产卵后, tini将等待信号并将这些信号转发到子过程中,并定期收获可能在您的容器中创建的僵尸过程。

当“第一个”子进程退出(上面的示例中的/your/program )时, tini也会退出,并在子进程的退出代码(因此,您可以检查容器的退出代码以了解孩子是否成功地退出)。

调试

如果某件事不像您期望的那样工作,请考虑提高详细水平(最多3):

tini -v — bash -c \’exit 1\’
tini -vv — true
tini -vvv — pwd\”>

 tini -v    -- bash -c \'exit 1\'
tini -vv   -- true
tini -vvv  -- pwd

作者

维护者:

  • 托马斯·奥罗斯科(Thomas Orozco)

贡献者:

  • 蒂安·格拉维(Tianon Gravi)
  • 大卫·瓦格(David Wragg)
  • 迈克尔·克罗斯比
  • 怀亚特·普尔(Wyatt Preul)
  • 帕特里克·斯坦哈特

特别感谢:

  • DaniloBürger为Alpine包装tini
  • Asko Soukka用于包装tini的Nix
  • 用于拱门Linux包装tini的nfnty

下载源码

通过命令行克隆项目:

git clone https://github.com/krallin/tini.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 tini https://www.zuozi.net/34156.html

nixos config
上一篇: nixos config
TTS WebUI
下一篇: TTS WebUI
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务