如何在openshift上从Docker容器中启动新的Docker容器

用例:

我想写一个服务器应用程序,为每个客户启动一个docker集装箱,只有特定的客户数据(用于数据保护)。 该服务应该在openshift或openshift原点上运行。

我在哪里search:

openshift起源最新的文件

openshift起源m4文档

我已经知道:

如果第一个容器是特权容器,或者主机的docker套接字和二进制文件链接到docker容器中,我可以从docker容器中启动docker容器。

[编辑31.10.15]像:docker docker run -v /var/run/docker.sock:/var/run/docker.sock ...

我不知道的是:

是否有可能在openshift上启动特权的docker容器,或者使用docker容器内的openshift api来启动另一个docker容器(使用特定的运行时configuration)? 顺便说一下:“母亲”容器应该是可扩展的。

这是可能的 – OpenShift做相同的事情来运行构build容器,执行Docker和源代码构build。 在容器安全上下文(在您的容器定义中)将priviliged设置为true,并定义/var/run/docker.sock的卷装载。

请注意,您需要拥有启动特权容器的权限(普通用户不能设置priv或host mount),这可以通过将项目添加到“priviliged”安全上下文约束( https:// docs.openshift.org/latest/admin_guide/manage_scc.html )。 在1.0.7中有一个策略命令,可以使oc policy add-scc-to-service-account

在阅读“ ~jpetazzo/在你的CI或testing环境中使用Docker-in-Docker?思考两次 ”之后,我会考虑使用sibbling容器而不是嵌套容器。
以下提取关于CI的talsk,但可以应用于每个客户端的openshift启动容器(而不是CI启动容器)

你真的想要Docker在Docker吗? 或者你只是想从你的CI系统中运行Docker(特别是:构build,运行,有时推送容器和图像),而CI系统本身在一个容器中?

最简单的方法是将Docker套接字暴露给您的CI容器,通过绑定挂载-v标志。

简单地说,当你启动你的CI容器(Jenkins或者其他)时,不要用Docker-in-Docker一起黑客攻击,

 docker run -v /var/run/docker.sock:/var/run/docker.sock ... 

现在这个容器将有权访问Docker套接字,因此将能够启动容器。 除了启动“子”容器,它将启动“兄弟”容器。