【问题标题】:Run Two Services in One container Docker在一个容器中运行两个服务 Docker
【发布时间】:2021-07-21 07:01:53
【问题描述】:

下面是我的 Docker 文件,我正在创建它的映像并启动我的容器:

ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]

我的docker-entrypoint.sh如下:

set -eo pipefail

if [ "${#}" -ne 0 ]; then
    exec "${@}"
else
    gunicorn \
        --bind  "0.0.0.0:${SUPERSET_PORT}" \
        --access-logfile '-' \
        --error-logfile '-' \
        --workers 10 \
        --worker-class gthread \
        -k gevent \
        --threads 20 \
        --timeout 6000 \
        --limit-request-line 0 \
        --limit-request-field_size 0 \
        "${FLASK_APP}"
    celery --app=superset.tasks.celery_app:app worker -Ofair -l INFO    
fi

gunicorn 服务器运行良好,但 celery 工人没有出现,我在这里做错了什么吗?

回答后更新:

 gunicorn \
        --bind  "0.0.0.0:${SUPERSET_PORT}" \
        --access-logfile '-' \
        --error-logfile '-' \
        --workers 10 \
        --worker-class gthread \
        -k gevent \
        --threads 20 \
        --timeout 6000 \
        --limit-request-line 0 \
        --daemon \
        --limit-request-field_size 0 \
        "${FLASK_APP}" &\
    celery --app=superset.tasks.celery_app:app worker -Ofair -l INFO

【问题讨论】:

  • & 结束gunicorn 命令以在后台运行它。就像现在一样,celery 命令在 gunicorn 命令完成之前不会运行。
  • 为什么这些必须是同一个容器?如果您删除此入口点脚本,您可以docker run your-image celery --app=...,运行具有相同图像但不同命令的第二个容器。
  • @HansKilian 我在您发表评论后更新了问题我做得正确无法运行芹菜

标签: python docker celery gunicorn


【解决方案1】:

发生的情况是,一旦流到达 gunicorn 部分,这将阻塞并且不会释放,直到 gunicorn 退出/返回一些东西。

我会考虑使用supervisor (process control system)

另一方面,如果您想快速修复以测试事物,我建议使用--daemon(或-D)标志,它不会阻塞执行流程并分离进程(see docs )

【讨论】:

  • 我已经更新了我的问题,因为你的回答是我做得正确无法运行 celery
猜你喜欢
  • 2020-10-11
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多