2 回答
TA贡献1798条经验 获得超3个赞
每当 Docker 容器的入口点退出(或者,如果您没有入口点,则为它的主命令),容器就会退出。其推论是容器中的主进程不能是这样的命令celery multi
,它会产生一些后台工作并立即返回;您需要使用celery worker
在前台运行的命令。
我可能会将您的最后几行替换为Dockerfile
:
CMD ["celery", "worker", "--app=worker.tasks:celery"]
保留入口点脚本并将其更改为等效的前台celery worker
命令也应该可以完成这项工作。
TA贡献1809条经验 获得超8个赞
您还可以使用 supervisord 来运行您的 celery worker。如果出现问题,supervisord 还将监视并重新启动您的工作人员。以下是我为您的情况提取的工作图像的示例...
文件 supervisord.conf
[supervisord]
nodaemon=true
[program:celery]
command=celery worker -A proj --loglevel=INFO
directory=/path/to/project
user=nobody
numprocs=1
stdout_logfile=/var/log/celery/worker.log
stderr_logfile=/var/log/celery/worker.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
文件 start.sh
#!/bin/bash
set -e
exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
文件 Dockerfile
# Your other Dockerfile content here
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/start.sh"]
添加回答
举报