docker-compose和优雅的芹菜关闭

时间:2017-04-07 10:53:54

标签: django docker celery docker-compose

我一直想知道并为此寻找解决方案而且我找不到任何解决方案。

我在使用docker-compose构建的容器中运行Celery。我的容器配置如下:

celery:
  build: .
  container_name: cl01
  env_file: ./config/variables.env
  entrypoint:
    - /celery-entrypoint.sh
  volumes:
    - ./django:/django
  depends_on:
    - web
    - db
    - redis
  stop_grace_period: 1m

我的入口点脚本如下所示:

#!/bin/sh
# Wait for django
sleep 10
su -m dockeruser -c "celery -A myapp worker -l INFO"

现在,如果我运行docker-compose stop,我希望有一个温暖(优雅)关闭,为Celery提供1分钟(stop_grace_period)来完成已经启动的任务。然而,docker-compose stop似乎立即杀死了芹菜。芹菜还应该记录它被要求优雅地关闭,但除了突然停止我的任务日志之外我什么也看不见。

我做错了什么或者我需要做些什么才能让芹菜优雅地关闭?

编辑: 下面关于向--timeout提供docker-compose stop参数的建议答案并不能解决我的问题。

3 个答案:

答案 0 :(得分:1)

通过docs

Usage: stop [options] [SERVICE...]

Options:
-t, --timeout TIMEOUT      Specify a shutdown timeout in seconds (default: 10).

尝试将超时设置为至少60秒。

答案 1 :(得分:0)

尝试使用此:

docker-compose down 

答案 2 :(得分:0)

您需要将celery进程标记为exec,这样celery进程将具有与docker命令相同的ID,并且docker将能够向其发送SIGTERM信号并正常关闭celery进程。

# should be the last command in script
exec celery -A myapp worker -l INFO