3

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 としてではなく実行し続けながら、この名前付きボリュームを使用できるようにするための最良の方法は何でしょうか?

4

1 に答える 1

1

次の作業: Dockerfile で、インストールしてグループにsudo追加usersudo、パスワードを要求します。

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"

ただし、これが最善の方法であるかどうか、またはこれがセキュリティにどのような影響を与えるかはわかりません。

于 2016-03-10T23:34:39.133 に答える