我正在尝试使用以下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 apiFROM 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", "&"]
如评论中所述,您可以在CMD中传递2行bash脚本。但是,这可能会导致问题。 Docker并不是要在单个容器中运行多个进程。我已经在您的第二个CMD中看到了“&”参数。我猜您在第二个进程没有运行时遇到了问题,因此您尝试将其推向后台。
Docker建议的解决方案是在容器内运行supervisord
:https://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
。