RuntimeWarning: вы запускаете работника с привилегиями суперпользователя: это абсолютно не рекомендуется - PullRequest
1 голос
/ 08 января 2020

Я использую django + celery + redis, celery == 4.4.0 в локальной системе, она работает нормально, но когда я ее докеризую, я получаю вышеуказанную ошибку.

Я использую следующие команды для запускать как внутри, так и внутри контейнера

**CMDs**
celery -A nrn worker -l info 
docker run -d -p 6379:6379 redis
flower -A nrn --port=5555

Любая помощь высоко ценится

* settings.py **

CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'

CELERY_BROKER_URL = os.environ.get('redis', 'redis://127.0.0.1:6379/')

1 Ответ

2 голосов
/ 09 января 2020

Посмотрите документацию . Это предупреждение, но не ошибка (см. код ). Запуск Celery под root является ошибкой только в том случае, если вы разрешите сериализацию рассола, которая по умолчанию не включена (см. здесь ).

Однако лучше по-прежнему запускать Celery с более низким привилегии. В Docker (с образом на основе Debian) я выбираю запуск Celery под nobody: nogroup. Я использую это Dockerfile:

FROM python:3.6

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1

WORKDIR /srv/celery

COPY ./app app
COPY ./requirements.txt /tmp/requirements.txt
COPY ./celery.sh celery.sh

RUN pip install --no-cache-dir \
    -r /tmp/requirements.txt

VOLUME ["/var/log/celery", "/var/run/celery"]

CMD ["./celery.sh"]

, где celery.sh выглядит следующим образом:

#!/usr/bin/env bash

mkdir -p /var/run/celery /var/log/celery
chown -R nobody:nogroup /var/run/celery /var/log/celery

exec celery --app=app worker \
            --loglevel=INFO --logfile=/var/log/celery/worker-example.log \
            --statedb=/var/run/celery/worker-example@%h.state \
            --hostname=worker-example@%h \
            --queues=celery.example -O fair \
            --uid=nobody --gid=nogroup
...