使用 tini 优雅的关闭 Docker 进程

发布时间: 更新时间: 总字数:291 阅读时间:1m 作者: IP上海 分享 网址

tini 是一个针对容器开发的、精简的 init 服务。tini 的作用是生成子进程、避免僵尸进程生成、转发信号量(pid1 时)到子进程并等待它退出。使用 tini 可以优雅的结束容器内的进程。

背景

  • Linux 中 pid1init 进程可以接受中断信号量,并将该信号量转发到所有子进程
  • init 需要程序实现转发信号的功能才能关闭其他程序,一般的 bashsh 不具备上述功能
  • 使用 docker stop 时,容器内 pid1 进程将接受中断信号量

Dockerfile

二进制使用

ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
ADD https://github.com/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

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

apline

RUN apk add --no-cache tini
# Tini is now available at /sbin/tini
ENTRYPOINT ["/sbin/tini", "--", "/docker-entrypoint.sh"]

Debian

apt-get install tini

容器内进程

root         1     0  0 06:52 ?        00:00:00 /tini -- /docker-entrypoint.sh

debug

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

扩展

tini 实现类似的工具

参考

  1. https://github.com/krallin/tini
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数