--init--init-pathdocker run 选项,但不清楚如何使用它。

起初,我认为它类似于 dumb-init ,但包含在 docker core 中(有点“原生”)。但是 --init key 也需要设置 --init-path,指向“docker-init binary”,并且不知道从哪里获取它。谷歌对“docker-init”保持沉默。

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

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

最佳答案

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

例如,没有init,CMD变成pid 1。在这种情况下,/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 是一流的 init 进程,可以正确地作为 pid 1 运行。 pid 1 进程必须正确地获取 fork 子进程,如果没有,则会发生诸如资源泄漏和僵尸出现之类的坏事。

对于 fork 的应用程序来说,这就是您想要的,并且没有像通常那样将 child 收割的想法留给 init 系统。一个经典的例子是 java Jenkins 应用程序。

关于docker - 如何在 docker run 中使用 --init 参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43122080/

10-16 16:25