如何从openshift上的docker容器内启动一个新的docker容器

时间:2015-10-31 12:55:23

标签: docker openshift-origin

USECASE:

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

我搜索过的地方:

openshift origin latest documentation

openshift origin m4 documentation

我已经知道的事情:

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

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

我不知道的事情:

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

2 个答案:

答案 0 :(得分:2)

阅读“~jpetazzo/Using Docker-in-Docker for your CI or testing environment? Think twice.”后,我会考虑使用sibbling容器而不是嵌套容器。
以下提取关于CI的talsk但可以应用于每个客户端的openshift启动容器(而不是CI启动容器)

  

你真的想要Docker-in-Docker吗?或者你只是希望能够从CI系统运行Docker(特别是:构建,运行,有时推送容器和图像),而这个CI系统本身就在容器中?

     

最简单的方法是将Docker套接字暴露给CI容器,方法是将其绑定到-v标志。

     

简单地说,当你启动你的CI容器(Jenkins或其他),而不是与Docker-in-Docker一起攻击某些东西时,启动它:

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

现在这个容器可以访问Docker套接字,因此可以启动容器。除了不启动“子”容器外,它将启动“兄弟”容器。

答案 1 :(得分:0)

可能 - OpenShift运行执行Docker和源代码构建的构建容器也是一样的。在容器安全上下文中(在pod定义中),将priv设置为true并定义/var/run/docker.sock的卷装入。

请注意,您需要具有启动特权容器的权限(不允许常规用户设置priv或host mount),这可以通过将您的项目添加到“特权”安全上下文约束来完成({ {3}})。在1.0.7中,有一个策略命令可以使oc policy add-scc-to-service-account

更容易
相关问题