Docker: マウントしたVolumeにApacheが書き込めないとき

  • 23
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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-data1000にしておく方法で対応する。

Dockerfile
FROM php:5.6.15-apache

RUN usermod -u 1000 www-data \
    && groupmod -g 1000 www-data

  1. パーミッションを事前に設定しておけば対応できるPHPアプリであれば、chmod +wで対応できるが、権限まわりをちゃんとチェックしていないPHPアプリだとインフラ側で対応する必要がある…。