gpt4 book ai didi

docker - 不以 root 身份运行时从容器访问命名卷?

转载 作者:行者123 更新时间:2023-12-02 02:21:49 29 4
gpt4 key购买 nike

我在 Docker Compose 下运行 Celery。我想让 celery 花持久。所以我这样做:

version: '2'
volumes:
[...]
flower_data: {}
[...]
flower:
image: [base code image]
ports:
- "5555:5555"
volumes:
- flower_data:/flower
command:
celery -A proj flower --port=5555 --persistent=True --db=/flower/flower

但是,然后我得到:

IOError: [Errno 13] Permission denied: 'flower.dat'

我运行了以下命令来阐明原因:

    bash -c "ls -al /flower; whoami; celery -A proj flower --persistent=True --db=/flower/flower"

这清楚地说明了原因:

flower_1 | drwxr-xr-x 3 root root 4096 Mar 10 23:05 .
flower_1 | drwxr-xr-x 7 root root 4096 Mar 10 23:05 ..

也就是说,该目录被安装为root,但在[base code image]中,我确保运行的用户是而不是 root,因为根据 Celery 的扩展坞,永远不要以 root 身份运行:

FROM python:2.7
...
RUN groupadd user && useradd --create-home --home-dir /usrc/src/app -g user user
USER user
<小时/>

让 Celery Flower 继续不以 root 身份运行,但又能够使用此命名卷的最佳方式是什么?

最佳答案

以下工作:在 Dockerfile 中,安装 sudo 并将 user 添加到 sudo 组,需要密码:

RUN apt-get update
RUN apt-get -y install sudo
RUN echo "user:SECRET" | chpasswd && adduser user sudo

然后,在 Docker Compose 配置中,命令将是:

bash -c "echo SECRET | sudo -S chown user:user /flower; celery -A proj flower --power=5555 --persistent --db=/flower/flower"

不过,我不确定这是否是最好的方法,或者这样做的安全隐患是什么。

关于docker - 不以 root 身份运行时从容器访问命名卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35929442/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com