如何在启动时在 docker 容器上 运行 多个命令?

How to run multiple commands on docker container on startup?

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

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

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

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

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

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

当我先输入 flask run 命令时,后台脚本根本没有启动。

有什么正确的方法可以运行容器启动时的这两个命令吗?

创建 script.sh

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

并将其设置为您的命令

尝试添加

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

在 DockerFile 中

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

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

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