我在 Docker Compose 下运行 Celery。我想让 Celery's 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
,但[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 身份继续运行但能够使用这个命名卷的最佳方式是什么?