Dockerの-v
やdocker-composeのvolume
でホストのディレクトリをコンテナにマウントしたとき、コンテナ内のApache側から書き込めない現象があった。
概要
- VolumeでDockerホストの
/vagrant/public
をコンテナの/var/www/html
にマウント。 -
/vagrant/public
の所有者はvagrant:vagrant
。 -
/var/www/html
の所有者は1000:1000
。
この状態で、コンテナ内のApache上PHPアプリケーションがディレクトリを作ろうとすると権限がなく作れず。
対処法: Apacheのユーザ・グループを1000:1000にする
DockerはVolumeにマウントした場合、所有者が1000:1000になる。そのため、パーミッションで書き込み権限を与えない限りrootか1000でないと書き込めない。1なので、Dockerイメージを作るときに、www-data
を1000
にしておく方法で対応する。
Dockerfile
FROM php:5.6.15-apache
RUN usermod -u 1000 www-data \
&& groupmod -g 1000 www-data
-
パーミッションを事前に設定しておけば対応できるPHPアプリであれば、
chmod +w
で対応できるが、権限まわりをちゃんとチェックしていないPHPアプリだとインフラ側で対応する必要がある…。 ↩