【问题标题】:How to launch a host app using Docker Compose如何使用 Docker Compose 启动主机应用程序
【发布时间】:2022-01-24 10:38:09
【问题描述】:

在运行 Docker Compose 项目时,如果能够在主机操作系统(正在调用 docker-compose up)上打开具有某些参数的应用程序,那就太好了。这在运行 Web 应用程序时非常有用。例如,当我运行 docker-compose run 时,我希望 Docker Compose 自动在主机上打开位置为 http://localhost:8080 的浏览器,而不是手动打开浏览器并输入 http://localhost: 8080。就像我们在 Minikube 中看到的那样(例如在运行 minikube service web-deployment 时)。
我知道在 docker-compose.yml 中有一些参数可以用来传递在容器中运行的命令,例如 commandentrypoint,但我不知道主机操作系统上的应用程序是否可以这样做。

【问题讨论】:

  • 什么是主机应用程序?
  • @TheFool OP 在问题中举了一个例子:I would love to open a browser on host with location of http://localhost:8080
  • @Zeitounator 是的,我能读懂。我仍然不清楚,这里的问题是什么。我要求定义主机应用程序。我也不确定具体问题是什么,因为 docker / compose 解决了很多通过某些协议(即 http)提供服务的问题。正如 OP 自己提到的,Minikube 也以同样的方式使用容器镜像。
  • 执行docker-compose run...时是否可以在主机上运行命令,或者是否可以从容器中在主机上运行命令?
  • @Johnny 我的意思是前者。

标签: docker docker-compose minikube podman


【解决方案1】:

Compose 可以做的事情非常有限。它可以构建 Docker 镜像,没有任何排序约束,它可以启动(可能是长时间运行的)Docker 容器,但排序约束非常有限。它可以创建几个关联的 Docker 对象,例如网络和命名卷。不过,这实际上就是它所能做的。它无法执行更大规模的编排任务(“运行此迁移容器完成,然后运行此应用程序”)或启动非 Docker 任务。

您可以改用一些基于主机的工具来管理它。即使是一个 shell 脚本也足够了;可能是这样的

#!/bin/sh

# start the container stack
# (assumes the caller has permission to do this)
docker-compose up -d

# wait for the service to be ready
while ! curl --fail --silent --head http://localhost:8080; do
  sleep 1
done

# open the browser window
open http://localhost:8080

【讨论】:

  • 是的。这也是我要建议的。只需编写一个脚本,在主机上运行您的docker-compose 和任何其他命令。它实际上很优雅,不要以为这是一种老派的方法。
猜你喜欢
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2018-01-14
相关资源
最近更新 更多