5

用例:

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

我搜索过的地方:

openshift origin 最新文档

openshift 起源 m4 文档

我已经知道的:

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

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

我不知道的是:

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

4

2 回答 2

3

在阅读“~jpetazzo/在 CI 或测试环境中使用 Docker-in-Docker?三思而后行。 ”之后,我会考虑使用同级容器而不是嵌套容器。
以下关于 CI 的摘录,但可以应用于每个客户端的 openshift 启动容器(而不是 CI 启动容器)

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

最简单的方法是通过将 Docker 套接字与-v标志绑定挂载来将 Docker 套接字公开给 CI 容器。

简而言之,当您启动 CI 容器(Jenkins 或其他)时,不要使用 Docker-in-Docker 来破解某些东西,而是从以下内容开始:

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

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

于 2015-10-31T13:05:11.150 回答
0

有可能——OpenShift 执行相同的操作来运行执行 Docker 和源代码构建的构建容器。在容器安全上下文中(在您的 pod 定义中)将 priviliged 设置为 true 并定义 /var/run/docker.sock 的卷挂载。

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

于 2015-11-03T01:34:59.050 回答