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
、Celery のドックがルートとして実行されないよう[base code image]
に、実行しているユーザーがルートではないことを確認します。
FROM python:2.7
...
RUN groupadd user && useradd --create-home --home-dir /usrc/src/app -g user user
USER user
Celery Flower が root としてではなく実行し続けながら、この名前付きボリュームを使用できるようにするための最良の方法は何でしょうか?