有--init
和--init-path
选项docker run
,但不清楚如何使用它.
起初,我认为它类似于dumb-init,但包含在docker core(有点像"native")中.但--init
关键要求--init-path
也要设置,指向'docker-init binary',并且不知道从哪里拿它.谷歌对"docker-init"保持沉默.
好吧,也许我应该使用'yelp/dumb-init'或'phusion/baseimage-docker',但这些解决方案似乎没有使用docker run
的--init
选项.
所以,我很好奇我在哪里把这个"docker-init二进制"设置--init-path
为?
Mat*_*att 54
在run命令中指定新的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
Run Code Online (Sandbox Code Playgroud)
使用--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
Run Code Online (Sandbox Code Playgroud)
tini是一个可以正确运行为pid 1的第一类init进程.一个pid 1进程必须正确地收集分叉的子进程,如果没有,那么就会发生诸如资源泄露和僵尸出现之类的坏事.
这就是你想要的那些应用程序,这些应用程序是fork并且没有用子进行编写的,因为通常他们会把它留给init系统.一个典型的例子是java Jenkins应用程序.
归档时间: |
|
查看次数: |
28121 次 |
最近记录: |