Docker - 在容器内部运行容器

7

我有两个应用程序:

  • 一个Python控制台脚本,执行短期任务并退出
  • 一个Flask前端,通过传递命令行参数启动控制台应用程序

目前,Flask项目携带控制台脚本的副本,并在必要时使用 subprocess 运行它。这在Docker容器中非常有效,但它们过于紧密耦合。有些情况下,我想从命令行运行控制台脚本。

我想将这两个应用程序分开到单独的容器中。为了使其工作,Flask应用程序需要能够在单独的容器中启动控制台脚本(该容器可以在不同的机器上)。理想情况下,我不想在Flask容器内部运行控制台脚本容器,以便每个容器仅运行一个进程。此外,我还需要能够传递控制台脚本命令行参数。


问:如何从容器内部生成一个短暂的任务容器?


1个回答

7
你可以让容器访问执行docker指令。它需要直接访问docker套接字或需要各种TCP环境变量和文件(客户端证书等)。显然,容器还需要安装docker客户端
以下是一个简单的容器示例,可在主机上执行docker指令:
docker run -v /var/run/docker.sock:/var/run/docker.sock your_image

需要注意的是,这与在容器中运行Docker守护程序不同。要实现这一点,您需要像jpetazzo/dind这样的解决方案。


谢谢回复。我会尝试一下。我猜想,如果控制台脚本应该在不同的主机上运行,那么这种方法就行不通了,因为传递的套接字是来自Flask主机的。我该如何传递来自不同计算机的套接字? - user4794170
最棘手的部分是找出如何识别该主机,当然,还要确保Flask容器通过tcp可以访问到该主机。然后,Flask容器需要主机客户端证书。实际上,这听起来像是一场噩梦 - 有没有一个很好的理由不仅仅确保两者在同一主机上运行? - kojiro
尽管有时候可能需要这样的解决方案,但它会带来极大的安全风险。更多信息请参见此处 https://dev59.com/SlkR5IYBdhLWcg3wygDp - Charalamm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接