【问题标题】:How do I start a docker container in Docker-Compose from an app running in another docker container如何从在另一个 docker 容器中运行的应用程序在 Docker-Compose 中启动 docker 容器
【发布时间】:2021-07-06 20:13:39
【问题描述】:

我有两个要在 docker-compose 下运行的应用程序/服务。 (AppA 和 AppB)

我希望在运行 docker-compose up 时启动 AppA,但不启动 AppB。并且在满足各种条件后,我想让AppA(它是docker容器中的一个Go应用)启动AppB的docker容器。

我的 docker-compose.yml 文件定义了这两个服务,如果使用以下命令启动:

docker-compose up

AppA 和 AppB 都开始运行。 (所以我相信我的 docker-compose.yml 配置正确) 如果我只想运行 AppA(我确实想要!)我运行这个命令:

docker-compose up AppA

只有 AppA 会启动。 (到目前为止一切都很好。)

当我要启动 AppB 时,我让 AppA 从 golang 代码中调用以下代码:

cmd := exec.Command("docker run AppB")

cmd := exec.Command("docker-compose start AppB")

这两个都会产生错误:

Error: fork/exec docker run AppB: no such file or directory.

关于如何在另一个 docker 容器中从 Go 应用启动 docker 容器有什么想法吗?

【问题讨论】:

  • This 或许能帮到你。
  • 在容器内部,您需要docker-compose.yml 文件的副本,您需要docker-compose 工具本身的副本,并且您需要对整个主机具有不受限制的root 等效管理权限。让两个容器一直运行似乎更简单、更安全。
  • 我实际上需要多个 AppB 副本,并且还需要其他应用程序。我认为让它们始终运行并不是一个可行的解决方案。我需要能够启动将运行一段时间的应用程序,然后它们会在完成后退出。如果它像两个应用程序一样简单,我认为你是对的。我只是简化以帮助定义问题。

标签: docker go docker-compose


【解决方案1】:

我猜你还没有将 AppB 复制到容器 appA。

你可以使用这个命令

docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

这允许您在容器和本地文件系统之间复制文件/文件夹 docker container cp

在你的情况下,命令可以是:

docker container appA:/appB appB

从这里开始,你可以开始思考如何在容器 A 中运行容器 B。

【讨论】:

  • 我不确定是否要从我的 appA 容器运行 appB。在实践中,我有一堆应用程序,而不仅仅是 appB,我宁愿让它们每个都从自己的容器中运行。我在想,因为我的 docker-compose.yml 中有两个 docker 容器,所以我可以在需要时启动第二个容器。我会更多地研究你的建议,也许我在想事情不对。 (而人们在没有任何评论的情况下投反对票呢???)
  • 即使在容器内运行容器是可行的,但不建议这样做,我认为它不会解决您的问题。我猜你想要做的是从一个容器中部署一个新容器到一个 docker 主机中,我对此没有任何经验。但是,您可以尝试编写脚本以通过 SSH 连接到 docker 主机并从容器 AppA 运行它。
  • 是的,我想从一个容器中部署一个新的 docker 容器。感谢您的 cmets 和建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 2022-11-13
  • 2021-12-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多