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アプリだとインフラ側で対応する必要がある…。 ↩