运行时警告:您正在以超级用户权限运行工作程序:绝对不推荐这样做

Pra*_*yan 14 redis celery

我在本地使用 django+celery+redis,celery==4.4.0 它工作正常但是当我对它进行 dockerizing 时,我收到了上述错误。

我正在使用以下命令在本地和容器内运行

**CMDs**
celery -A nrn worker -l info 
docker run -d -p 6379:6379 redis
flower -A nrn --port=5555
Run Code Online (Sandbox Code Playgroud)

任何帮助都受到高度赞赏

*设置.py**

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

CELERY_BROKER_URL = os.environ.get('redis', 'redis://127.0.0.1:6379/')
Run Code Online (Sandbox Code Playgroud)

Tom*_*art 23

查看文档。不过,这是一个警告,而不是错误(请参阅代码)。仅当您允许默认未启用的 pickle 序列化时,在 root 下运行 Celery 才会出错(请参阅此处)。

但是,以较低的权限运行 Celery 仍然是最佳实践。在 Docker(使用基于 Debian 的映像)中,我选择在nobody:下运行 Celery 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"]
Run Code Online (Sandbox Code Playgroud)

其中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
Run Code Online (Sandbox Code Playgroud)

  • 不,Celery 会做得很好,因为它不需要超级用户权限来完成其工作。服务(尤其是那些暴露在网络中的服务)一旦设置了所需的一切(例如绑定到< 1024 的端口),就会放弃超级用户权限,这是一个很好的做法。这样,安全风险就会最小化。 (4认同)