在docker中reexec.Init()的目的是什么?

时间:2015-10-23 01:32:47

标签: docker containers

在阅读docker1.8的源代码时,我发现 reexec.Init()出现在docker.godockerinit.go和一些测试文件中。

如果reexec已注册函数,则 reexec.Init()将返回true,以便在docker.go中进程将返回。

来自README.md包的reexec

  

reexec包促进了我们需要的docker二进制文件的busybox样式重新执行,因为   使用Go的分叉限制。

那么使用 reexec.Init()的目的是什么?

reexec.Init()的唯一目的是初始化docker容器的环境吗?

1 个答案:

答案 0 :(得分:0)

正如您在commit 7321067中看到的那样,它在docker 1.2(2014年8月)中引入了reexec.Init()

  

这会通过不指定-driver来更改exec驱动程序的工作方式   reexec上的标志   对于每个exec驱动程序,它们都会注册自己的函数,这些函数将与exec上的argv 0匹配,并在它们匹配时调用。

     

这也允许将任何功能添加到docker中,以便可以重新执行二进制文件,并且可以调用任何类型的函数。
  我将docker exec上的标志解析移动到特定的初始值设定项,以便实现不会相互渗透   这也允许reexec初始值设定项中的更多灵活性,以指定自己的标志和选项。

     

Init被称为exec进程的第一部分,如果调用初始化函数则返回true

如果调用初始值设定项,则docker会以静默方式退出而不是旧的错误消息 之前,它是:

log.Fatal("This is a client-only binary - running it as 'dockerinit' is not supported.")