python - Docker + Celery 告诉我不要以 root 身份运行,但一旦我不这样做,我就没有运行权限
问题描述
我有一个 Django (2.1.2) Docker 项目,我尝试包含 Celery (4.2.1),由于权限错误,该项目最终将退出 0。
码头工人-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
解决方案
- 如果要指定 a
uid
,请使用multi
命令,而不是,并以 root 身份worker
运行命令。multi
如果要使用worker
,只需运行不带uid
. 1
如果仅用于本地开发,您也可以将 C_FORCE_ROOT 环境变量设置为并在 docker 中以 root 身份运行。
注意,您可能还需要更新文件权限,以防您的 celery 任务将任何内容写入文件系统(如日志文件或临时文件)。
推荐阅读
- tensorflow - 如何在TensorFlow中给定稀疏矩阵数据计算余弦相似度?
- tensorflow - 使用 TensorBoard 从 tf_agents 可视化图形
- json - JSON-RPC 与 JSON 补丁
- python - 在 pyspark RDD 上执行 map/reduce 时出现一些错误
- hybris - 斯巴达克斯目录同步
- featuretools - 使用 featuretools dfs 计算时间窗轮廓
- excel - VBA将特殊字符放入字符串
- java - 调用 Jersey REST 客户端时出现 NoClassDefFoundError
- c - sprintf 的格式说明符不起作用
- scala - 如何在运行时将 hocon 配置动态加载到案例类中