如何在docker run中使用--init参数

发布于 2021-02-01 12:50:26

--init--init-path选项docker run,但不清楚如何使用。

一开始,我认为它有点像dumb-init,但包含在docker
core中(有点像“ native”)。但是也--init需要--init-path设置关键要求,指向“ docker-
init二进制文件”,并且不知道在何处使用它。Google对“ docker-init”保持沉默。

好的,也许我应该使用’yelp / dumb-init’或’phusion / baseimage-
docker’,但是这些解决方案似乎没有使用docker run‘s --init选项。

所以,我很好奇我应该在哪里把这个“ docker-init二进制文件”设置--init-path为?

关注者
0
被浏览
1320
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    在run命令中指定新的docker
    –init选项基本上将ENTRYPOINT设置为tini并将CMD传递给它或您在命令行上指定的任何内容。

    例如,如果不使用init,则CMD变为pid1。在这种情况下,/ bin / bash

    docker run -ti --rm ubuntu:16.04 /bin/bash
    root@d740f7360840:/# ps -fA
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  1 03:30 ?        00:00:00 /bin/bash
    root        11     1  0 03:30 ?        00:00:00 ps -fA
    

    使用–init,tini(/ dev / init)变为pid 1

    docker run -ti --init --rm ubuntu:16.04 /bin/bash
    root@5b5fe6ee71b5:/# ps -fA
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  1 03:30 ?        00:00:00 /dev/init -- /bin/bash
    root         7     1  0 03:30 ?        00:00:00 /bin/bash
    root        12     7  0 03:30 ?        00:00:00 ps -fA
    

    tini是一流的初始化过程,可以正确地作为pid 1运行。pid 1进程必须正确地获取分叉的子进程,否则,诸如资源泄漏和僵尸出现之类的坏事情就会发生。

    这是您想要的应用程序,这些应用程序分叉并且在编写时没有考虑到孩子的收获,因为通常它们会将其留给init系统。一个经典的例子是Java
    Jenkins应用程序。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看