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