非root用户如何在容器中访问命名卷?

3

我正在Docker Compose下运行Celery。 我希望使Celery的Flower持久化。 因此,我执行以下操作:

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,但在[基础代码镜像]中,我确保运行用户不是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身份运行的情况下继续使用这个命名卷,这是最好的方法?
1个回答

1
以下操作是有效的:在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"

我不确定这是否是最好的方法,以及这样做的安全隐患。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接