是否可以从Docker容器启动Docker容器?

时间:2018-12-29 14:45:09

标签: docker containers

...,以便两个容器都在同一主机上运行,但是在容器内没有容器

长版

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

  • 为两个容器制作Dockerfile
  • 两个容器应该共享一个公共卷(当然是属于主机的),在这里下载/使用输入数据。
  • 调度程序容器应该能够启动工作程序容器,以便该工作程序容器将在主机环境中运行,但不能在调度程序容器中运行。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以,但您信任的是对主机具有不受限制的主机根访问权限的容器

启动要启动其他容器的容器时,通常需要使用以下方式绑定安装主机的Docker套接字

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

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

在您描述的体系结构中,更安全的方法是将“计划程序”和“工人”部件组合到一个容器中。它会定期轮询服务器,如果有工作要做,它会进行轮询。如果您想一次执行更多工作,则可以启动此容器的多个副本。这也使您可以轻松地限制一次同时执行的并行工作量,因此,您不必尝试撤消无法在4核系统上一次运行的一千个工作。