質問: ### 実現したい事 git+dockerでLAMP環境構築をほぼ自動化したい。 httpd ユーザ権限にて書き込みするディレクトリのchownの手動ステップが挟まってしまい自動化出来てない。 ※デザイナーにもリポジトリ配布したいので難しい事は避けたい ※自動化と書いてますが多少語弊があるので悪しからずご理解ください ### 困っている点 前述の通りアップロードフォームの動作でwebコンテナのapache userでの書き込みの際パーミッションエラーが出てしまい自動化できていません。 docker-compose up -dの前に手動でホスト側の該当ディレクトリのパーミッションを手動で変更をすると問題なく動作します。 ``` git clone https://user@hogehoge/repos/ chown -R 1000:1000 ./contents/uplode.temp docker-compse up -d ``` chownのステップを先行ステップのgitか後続ステップのdocker-composeで吸収できないか? ### 質問 gitではディレクトリーのパーミッションは管理しないと理解しているのですが、下記程度の手順で自動化をしたい場合ホスト側のフォルダーのパーミッション調整はどこ側でどの様に実装したらよいですか? ### 試行した事 gitのサーバーサイドupdate hook? <= git pullしたら戻ってしまう.. docker-compose buildの際? <= docker-compose.yml内でホスト側のファイルに対してコマンド発行出来る? ### ``` version: '2' services: web: build: context: ./ dockerfile: Dockerfile.web image: project_hoge/web container_name: web ports: - "80:80" volumes: - ./contents/html:/var/www/html - ./contents/webapp:/var/www/webapp - ./contents/uplode.temp:/var/www/uplode.temp links: - dbs:dbs depends_on: - dbs environment: - TZ=Asia/Tokyo ``` ``` FROM centos MAINTAINER myname RUN yum install -y epel-release RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm RUN yum install -y --enablerepo=remi httpd httpd-devel less && systemctl enable httpd.service RUN yum install -y --enablerepo=remi,remi-php70 php71 php71-php php71-php-mbstring php71-php-mcrypt php71-php-pdo php71-php-common php71-php-pecl-memcache php71-php-pecl-memcached php71-php-mysqlnd php71-php-cli php71-php-pear php71-php-gd php71-php-pecl-imagick RUN php71-pear install Log RUN rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm RUN yum install -y mysql-community-client RUN usermod -u 1000 apache && groupmod -g 1000 apache CMD ["/sbin/init"] ```
回答: いっそ、コンテナの Apache を `root` で動かしてはいかがでしょうか Git もそうですし、Docker も `root` で動作させることを前提とするような設計になっており、 ホストは複数ユーザーで利用せず、使い捨てる運用が向いているように思います どうしても本番環境の都合等で権限の設定が必要な場合は、 docker-compose.override.yml というファイルを作り、 ホスト側から Apache が `root` で動くような conf ファイルを `volumes` で bind mount したり、 あるいは `environment` で環境変数で指定したりすれば、 開発環境だけ `root` で動作させることができます この場合、本番環境では `docker-compose` コマンド実行時に `-f` オプションで `docker-compose.yml` ファイルを指定することで `docker-compose.override.yml` を読み込まず、 `apache` 権限で動作させることが実現できます