我有一个Django(2.1.2)Docker项目,我尝试包括Celery(4.2.1),由于权限错误,该项目最终将退出0。
docker-compose.yml
...
celery:
build: .
command: celery worker -A core --workdir /opt/services/web_app/src -l info
volumes:
- .:/opt/services/web_app/src
depends_on:
- database1
- redis
在我使用“ docker-compose build”进行构建,然后运行“ docker-compose up”后,出现以下错误消息:
celery_1 | /usr/local/lib/python3.7/site-packages/celery/platforms.py:796:
celery_1 | RuntimeWarning: You're running the worker with superuser privileges: this
celery_1 | is absolutely not recommended!
celery_1 |
celery_1 | Please specify a different user using the --uid option
所以..我什至不知道Docker拥有“用户”,因此在公开之前我将其添加到了我的Dockerfile的底部。
...
RUN groupadd -g 999 celery && \
useradd -r -u 999 -g celery celery
USER celery
EXPOSE 8000
,然后用用户更新“ Dockerfile”:
...
celery:
build: .
command: celery worker -A core --workdir /opt/services/web_app/src -l info --uid=celery
volumes:
- .:/opt/services/web_app/src
depends_on:
- database1
- redis
当我现在运行它时,我收到错误消息:
celery_1 | File "/usr/local/lib/python3.7/site-packages/celery/platforms.py", line 502,
celery_1 | in initgroups return os.initgroups(username, gid)
celery_1 | PermissionError: [Errno 1] Operation not permitted
答案 0 :(得分:1)
uid
,请使用multi
命令而不是worker
,并以root用户身份运行multi
命令。如果要使用worker
,只需运行不带uid
的命令即可。1
并在docker中以root用户身份运行。n.b。,如果您的celery任务将任何内容写入文件系统(例如日志文件或临时文件),您可能还需要更新文件权限。