首页 > 解决方案 > 是否可以从 Docker 容器启动 Docker 容器?

问题描述

...这样两个容器都在同一主机上运行,​​但不是容器内的容器

长版

我制作了两个名为schedulerand的 python 程序worker。调度程序定期询问服务器是否有任何task事情要做。如果有一些即将到来taskscheduler将下载输入数据并从worker下载的数据开始。我现在正在考虑将这两个程序容器化。我在这里需要的包括:

有没有简单的方法可以做到这一点?

标签: dockercontainers

解决方案


你可以,但你信任一个对主机具有不受限制的 root 访问权限的容器

启动容器时要启动其他容器,需要绑定挂载主机的 Docker 套接字,通常使用

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

Dockerfile 应该安装标准的 Docker CLI(或任何其他特定于语言的 Docker API),然后当它进行docker调用时,它将完全像您从主机运行相同的 Docker 命令一样工作。特别是这意味着docker run -v容器中的任何选项都使用主机的文件系统路径。这也意味着容器可以启动一个子容器来访问主机上的任何文件,甚至在系统目录中,例如/etc,并且可以自由地检查任何其他正在运行的 Docker 容器的详细信息。

在您描述的架构中,更安全的路径是将“调度程序”和“工作人员”部分组合到一个容器中。它定期轮询服务器,如果有工作要做,就去做。如果你想一次做更多的工作,你可以启动这个容器的多个副本。这也让您可以轻松地限制您一次执行的并行工作量,因此您不会尝试在 4 核系统上同时执行不可能同时运行的一千个作业。


推荐阅读