Docker + Celery告诉我不要以超级用户身份运行,但是一旦我不以root用户身份运行,我将无法运行

时间:2018-10-29 02:13:22

标签: python django docker permissions celery

我有一个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

1 个答案:

答案 0 :(得分:1)

  1. 如果要指定uid,请使用multi命令而不是worker,并以root用户身份运行multi命令。如果要使用worker,只需运行不带uid的命令即可。
  2. 如果仅用于本地开发,还可以将C_FORCE_ROOT env变量设置为1并在docker中以root用户身份运行。

n.b。,如果您的celery任务将任何内容写入文件系统(例如日志文件或临时文件),您可能还需要更新文件权限。