当不是 运行 作为 root 时从容器访问命名卷?
Access named volume from container when not running as root?
我 运行ning Celery 在 Docker Compose 下。我想让芹菜花持久。所以我这样做:
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]
中,我确保用户 运行ning 是 而不是 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 用户身份但又能够使用这个命名卷的最佳方式是什么?
以下工作:在Docker文件中,安装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"
不过,我不确定这是否是最好的方法,或者它的安全隐患是什么。
我 运行ning Celery 在 Docker Compose 下。我想让芹菜花持久。所以我这样做:
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]
中,我确保用户 运行ning 是 而不是 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 用户身份但又能够使用这个命名卷的最佳方式是什么?
以下工作:在Docker文件中,安装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"
不过,我不确定这是否是最好的方法,或者它的安全隐患是什么。