【问题标题】:How to run multiple commands on docker container on startup?如何在启动时在 docker 容器上运行多个命令?
【发布时间】:2019-10-03 13:51:35
【问题描述】:

我有 Flask 应用程序容器,它必须在端口 5000 上运行。

我还有一个与队列相关的后台进程。这个过程有一个无限循环,这就是我想在后台运行它的原因。

我正在使用 docker-compose.yml 文件来创建容器。目前,我只能运行一个命令来启动烧瓶服务器。

flask run --host=0.0.0.0 --port 5000。我在 docker-compose 中使用 command 选项。

这是我想在后台运行的命令python app/workload/services/queue_services.py > qlog.txt

当我将后台命令首先放在command 中时,服务器没有启动,我只看到后台脚本的输出。

当我把flask run 命令放在第一位时,后台脚本根本没有启动。

在容器启动时运行这两个命令有什么合适的方法吗?

【问题讨论】:

  • 通常你会在第二个容器中运行另一个命令。是否有任何特定原因必须在同一个容器中?
  • 根据我正在处理的要求,它们必须在同一个容器上。

标签: python docker flask docker-compose docker-entrypoint


【解决方案1】:

创建一个script.sh

#!/bin/bash
python app/workload/services/queue_services.py > qlog.txt &
flask run --host=0.0.0.0 --port 5000

并将其设置为您的命令

【讨论】:

    【解决方案2】:

    尝试添加

    CMD ["gunicorn", "--bind=0.0.0.0:5000", "--workers=1", "wsgi"]
    

    在 Docker 文件中

    【讨论】:

      【解决方案3】:

      另一种方法是使用像 supervisord 这样的程序。这样,我们可以将其扩展到多个服务,而无需修改 Dockerfile

      https://docs.docker.com/config/containers/multi-service_container/

      我已经用 supervisord 和 jre 编译了一个图像。 https://hub.docker.com/r/palashgoel/supervisord-jre

      【讨论】:

        猜你喜欢
        • 2019-03-11
        • 2023-03-09
        • 2019-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        相关资源
        最近更新 更多