芹菜多里面码头工人容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了芹菜多里面码头工人容器相关的知识,希望对你有一定的参考价值。

我在码头工人容器中有芹菜的python应用程序。我想要几个工人队列不同。例如:

celery worker -c 3 -Q queue1
celery worker -c 7 -Q queue2,queue3

但我不会在docker compose中这样做。我发现芹菜多了。我试过用它。

version: '3.2'
services:
  app:
    image: "app"
    build:
      context: .
    networks:
      - net
    ports:
      - 5004:5000
    stdin_open: true
    tty: true
    environment:
      FLASK_APP: app/app.py
      FLASK_DEBUG: 1
    volumes:
      - .:/home/app
  app__celery:
    image: "app"
    build:
      context: .
    command: sh -c 'celery multi start 2 -l INFO -c:1 3 -c:2 7 -Q:1 queue1 -Q:2 queue2,queue3'

但我明白了......

app__celery_1  |    > celery1@1ab37081acb9: OK
app__celery_1  |    > celery2@1ab37081acb9: OK
app__celery_1 exited with code 0

我的芹菜容器关闭了。怎么不让他靠近他的原木?

UPD:Celery多创建了后台进程。如何在前景中启动芹菜多?

答案

我这样做了。我用supervisord代替芹菜多。 Supervisord从前景开始,我的容器没有关闭。

command: supervisord -c supervisord.conf

我将所有队列添加到supervisord.con

[program:celery]
command = celery worker -A app.celery.celery -l INFO -c 3 -Q q1
directory = %(here)s
startsecs = 5
autostart = true
autorestart = true
stopwaitsecs = 300
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0

[program:beat]
command = celery -A app.celery.celery beat -l INFO --pidfile=/tmp/beat.pid
directory = %(here)s
startsecs = 5
autostart = true
autorestart = true
stopwaitsecs = 300
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0

[supervisord]
loglevel = info
nodaemon = true
pidfile = /tmp/supervisord.pid
logfile = /dev/null
logfile_maxbytes = 0
另一答案

首先,我不明白使用multi和docker的优势。在我看来,你希望每个工人都在一个单独的容器中。这样您就拥有了灵活性和微服务环境。

如果您仍希望在同一容器中拥有多个工作线程,我可以通过在命令末尾添加while true; do sleep 2; done来建议解决方法以保持容器打开:celery multi start 2 -l INFO -c:1 3 -c:2 7 -Q:1 queue1 -Q:2 queue2,queue3 && while true; do sleep 2; done

或者,将其包装在一个简短的脚本中:

#!/bin/bash
celery multi start 2 -l INFO -c:1 3 -c:2 7 -Q:1 queue1 -Q:2 queue2,queue3
while true; do sleep 2; done

以上是关于芹菜多里面码头工人容器的主要内容,如果未能解决你的问题,请参考以下文章

码头工人撰写孤儿容器警告

sh 利用nsenter进入码头工人容器

从里面停止码头工人的容器

码头工人撰写 |虚拟主机

Akka遥控器在码头工人容器中

码头工人在 scaleway 上的暴发户