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

我在Docker Compose下运行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的docks永远不会以root身份运行:

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

芹菜花最好的办法是继续不作为根源,但能够使用这个命名量?

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

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

然后,在Docker Composeconfiguration中,命令将是:

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

我不确定这是否是最好的方法,或者这是什么安全性的影响。