Docker + Celery 告诉我不要以 root 身份运行,但一旦我不这样做,我就没有运行权限
Posted
技术标签:
【中文标题】Docker + Celery 告诉我不要以 root 身份运行,但一旦我不这样做,我就没有运行权限【英文标题】:Docker + Celery tells me not to run as root, but once I don't, I lack permissions to run 【发布时间】:2019-04-01 22:26:05 【问题描述】:我有一个 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】:-
如果要指定
uid
,请使用multi
命令,而不是worker
,并以root 身份运行multi
命令。如果您想使用worker
,只需运行不带uid
的命令即可。
如果这只是为了本地开发,您也可以将 C_FORCE_ROOT 环境变量设置为 1
并在 docker 中以 root 身份运行。
n.b.,您可能还需要更新文件权限,以防您的 celery 任务将任何内容写入文件系统(如日志文件或临时文件)。
【讨论】:
“如果这只是为了本地开发,在 docker 中以 root 身份运行”在 Docker 在生产中以 root 身份运行是很正常的!以上是关于Docker + Celery 告诉我不要以 root 身份运行,但一旦我不这样做,我就没有运行权限的主要内容,如果未能解决你的问题,请参考以下文章