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容器(具有特定的运行时配置)?顺便说一句:“母亲”容器应该是可扩展的。
答案 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