docker-composeでdata volumeをマウントした際にパーミッションを指定したかった

開発環境のdocker化しているときに当たった壁の話です。

プロジェクトのディレクトリ配下にNFSマウントし、他のロール(サーバ)とデータを共有しそれぞれ読み書きしているような箇所を開発環境のdockerでは、data volumeを使ってやろうと思っています。

data volumeをマウントする際、パーミッション周りで困ったのでメモしておきます。

開発環境について

php(php-fpm)のOfficial Imageを使っています。 https://hub.docker.com/_/php/

phpの実行ユーザは www-data

困っていること

簡潔に書くと、こういう構成で、php側から、hogedata 以下に読み書きしたいけど、

version: '3.5'

services:
  php-fpm:
    image: php:7.3-fpm-stretch
    volumes:
      - hogedata:/var/www/hoge-project/current/hogedata/
    environment:
      TZ: Asia/Tokyo
      LANG: ja_JP.UTF-8

volumes:
  hogedata:

パーミッションがこうなので、www-data からは書き込めない

drwxr-xr-x 2 root root 4096 Feb 16 19:55 hogedata

といった状況

回避策

先に、Dockerfileの方でパーミッションを設定しておくと、その設定が上書きされるので、先に作っておくことで回避できそう。 https://github.com/docker/compose/issues/3270#issuecomment-363478501

FROM php:7.3-fpm-stretch
RUN install -o www-data -g www-data -d /var/www/hoge-project/current/hogedata/
drwxr-xr-x 2 www-data www-data 4096 Feb 16 20:06 hogedata

でも、なんか、うーん。今回のケースのような場合は、Dockerfileの方にぐちゃぐちゃプロジェクト依存のものを書くのは嫌な気持ち。ライブラリのインストールとかだけにしたい。(あくまで気持ちの問題であって、Dockerfileとdocker-composeの住み分けは自分のなかで整理できてなく課題なのである。)

まとめ

ちょっとスッキリしないので、次のステップとして、今回はそもそも、volumeでやるのが良いんだっけ?というそもそも論を確認することと、docker の volume がちゃんと理解できてないのでする。(dockerの問題なのか、docker-composeの問題なのかなど)


こういうのがあったら、良いのかな。

SOURCE:TARGET:RW:OWNER

https://github.com/docker/compose/issues/3270#issuecomment-451862361