【问题标题】:How to host multiple flask applications in a single docker container?如何在单个 docker 容器中托管多个烧瓶应用程序?
【发布时间】:2019-06-10 15:01:34
【问题描述】:

在项目中,我有两个烧瓶应用程序,第一个 api 对一批文档调用并将它们分类为预测类,并在 json 文件中维护所有批次的状态。第二个 api 的工作是通过读取状态文件来告知特定批次的状态。现在我们不能在不同的容器上执行应用程序,因为它们都依赖于一个文件。状态通知 api 告诉批处理的实时状态,因此我们也不能等待处理 api 先完成它的 atsk,然后导出状态文件以供第二个 api 使用。我应该如何应对这一挑战,任何线索都会有很大帮助。

最初我在 docker 文件中尝试这些行:

CMD ["python3", "./pollingAPI.py"] CMD ["python3", "./m_api.py"]

我也在命令中尝试了 nohup 但没有结果:

运行 nohup python3 pollingAPI.py & sleep 5 CMD ["python3", "./m_api.py"]

使用屏幕也无法正常工作:

运行 nohup python3 pollingAPI.py & sleep 5 && screen -S myScreen CMD ["python3", "./m_api.py"]

【问题讨论】:

  • 您可以考虑使用在两个容器之间共享的 Docker 卷来保存同步所需的文件。更好的是设计一个不需要文件(和共享文件系统)的不同同步系统。如果您只尝试在容器中运行一个进程,这将容易得多。
  • 嘿@DavidMaze 是否可以将我们本地系统上的文件夹映射到 docker 容器,以便我可以将同一个文件夹映射到另一个容器,这样两个容器都可以读取相同的文件。而且根据你的建议,我也试图找到一种方法来消除依赖,但完全不可能消除这种依赖。

标签: api docker flask docker-image


【解决方案1】:

因此,Docker 最佳实践规定每个容器应该只在一个容器中运行一个主要应用程序。原因是您希望您的应用程序在 PID 1 上运行并自行接受任何和所有停止命令。最好的情况总是运行两个独立的容器,每个容器运行一个应用程序。

话虽如此,本文档清楚地概述了在容器中运行多个服务所必须的三个主要选项。我建议使用supervisord,但它们都是有效的。

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

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2020-02-21
    • 2021-07-22
    • 2020-10-20
    • 2020-02-04
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多