想要从单个Dockerfile运行python脚本和Flask api

问题描述 投票:0回答:1

我正在尝试使用以下docker文件创建容器。由于它将执行最后一个CMD,因此它将忽略CMD ["sh", "-c", "python3 run_scheduler.py --config=${config}"]。有没有一种方法可以从单个docker文件运行两者。另外,是否可以在${config}

中将CMD ["gunicorn", "--bind", "0.0.0.0:5000", "run_api:application", "&"]参数传递给flask api
FROM python:3.8

LABEL version="0.1"

WORKDIR /app
COPY . /app

ARG config=dev
RUN  pip install -r requirements.txt
EXPOSE 5000
CMD ["sh", "-c", "python3 run_scheduler.py --config=${config}"]
CMD ["gunicorn",  "--bind", "0.0.0.0:5000",  "run_api:application", "&"]
python docker gunicorn
1个回答
1
投票

如评论中所述,您可以在CMD中传递2行bash脚本。但是,这可能会导致问题。 Docker并不是要在单个容器中运行多个进程。我已经在您的第二个CMD中看到了“&”参数。我猜您在第二个进程没有运行时遇到了问题,因此您尝试将其推向后台。

Docker建议的解决方案是在容器内运行supervisordhttps://docs.docker.com/config/containers/multi-service_container/

根据命名概念,我想您可以使用Flask-APScheduler https://github.com/viniciuschiele/flask-apscheduler解决您的问题这样,您就可以摆脱第二个Sidecar脚本。

最后你问:

另外,是否可以将$ {config}参数传递给flask api

答案是肯定的。像这样在您的Dockerfile中声明ENV

FROM python:3.8
...
...
ENV config foo
...
CMD ["whatever_command", "--option", "${config}"]

通过这种方式,"${config}"将被替换为foo

© www.soinside.com 2019 - 2024. All rights reserved.