Docker 如何在停靠环境中从sh脚本启动守护进程芹菜工人

Docker 如何在停靠环境中从sh脚本启动守护进程芹菜工人,docker,celery,sh,Docker,Celery,Sh,我试图从docker映像的入口点脚本启动芹菜守护进程工作程序 start.sh #!/bin/bash service rabbitmq-server restart rabbitmqctl add_user xxx rabbitmqctl add_vhost sample_host rabbitmqctl set_user_tags xxx rabbitmqctl set_permissions -p sample_host krishna ".*" ".*

我试图从docker映像的入口点脚本启动芹菜守护进程工作程序

start.sh

#!/bin/bash

service rabbitmq-server restart 
rabbitmqctl add_user xxx
rabbitmqctl add_vhost sample_host 
rabbitmqctl set_user_tags xxx
rabbitmqctl set_permissions -p sample_host krishna ".*" ".*" ".*" 
rabbitmqctl set_user_tags xxx administrator 
service rabbitmq-server restart  
gunicorn djsr.wsgi:application  --user www-data --bind 0.0.0.0:8020 --workers 1 --timeout 120 
celery -A djsr worker -l info -Ofair &
dockerfile

RUN chmod +x /opt/app/scripts/start.sh
# start server
EXPOSE 8020
STOPSIGNAL SIGTERM
ENTRYPOINT ./scripts/start.sh
entryopint脚本中的所有命令都将执行,最后一个命令除外

如果我在虚拟机中登录并手动启动它,它就会工作

docker exec -it cdr  sh celery -A djsr worker -l info -Ofair &
我已尝试在容器开始文件中添加上述脚本,但仍然无法工作

我正在运行docker构建和Jenkins管道中的映像运行脚本

它是否与命令末尾的“&”有关


我知道生产中的芹菜需要配置为一项服务,但对于我的应用程序来说,这目前还可以使用。

如果这是真的,我会非常惊讶。可能发生的情况是脚本退出,Docker容器也退出。您可以通过从最后一行中删除
&
来防止这种情况的发生;但也许再加上
wait$作为最后一行。通常可以选择在守护程序模式下运行,而不需要后台运行守护程序,这正是为了支持这种类型的场景;这些通常应该放在三个单独的容器中,都作为自己容器的
CMD
,都作为前台进程。明白了,我需要将其重构为Docker compose。。。