Docker内にWordPress環境を作成した際に、PHPのファイルアップロード容量制限が20Mと小さくてアップロードできなかった時の話です。
具体的にはDockerコンテナ内のphp.iniの「post_max_size」と「upload_max_filesize」を書き換えた時の備忘録です。

DockerやLinuxに慣れている方から見ると効率的でない方法を取っているかもしれませんので、その点はご了承ください。

docker-composeの設定(修正前)

まず私が設定していたdocker-composeの初期設定は以下の通りです。


services:
  php:
    build: ./docker/php
    volumes:
      - ./public_html:/var/www/html
    depends_on:
      - mysql
    ports:
      - "80:80"

〜〜省略〜〜

上記の「php」コンテナのphp.iniを変更します。

まずDockerコンテナ内のphp.iniの消してはいけない設定を変更しないためにも、php.iniのマウントの前にコンテナ内のphp.iniの設定を確認することにしました。

Dockerコンテナ内のphp.iniの確認方法

docker-compose up -dでコンテナを作成した後に、phpコンテナに入ります。


docker-compose exec php bash

phpコンテナ内のphp.iniを検索します。


find / -name php.ini

私のコンテナ内では以下の場所にphp.iniがあることを確認できました。

/usr/local/etc/php/php.ini

php.iniの中身を参照します。


cat /usr/local/etc/php/php.ini

以下のようなphp.iniの中身を確認できたら、PCのローカル環境にphp.iniファイルを作成し、php.iniの内容をコピペします。


[Date]
date.timezone = "Asia/Tokyo"

〜省略〜

php.iniの編集

環境によって変わると思いますが、私は以下のようにphp.iniを編集しました。
「;」のコメントアウトから下が今回追加した内容です。


[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[Unix Socket]
pdo_mysql.default_socket = /run/mysqld/mysqld.sock
mysql.default_socket = /run/mysqld/mysqld.sock
mysqli.default_socket = /run/mysqld/mysqld.sock
[Log settings]
log_errors = On
error_log = /dev/stderr

;メモリ使用量の上限
memory_limit = 512M

;POSTデータの最大サイズ ※合計サイズ
post_max_size = 500M

;1ファイルあたりの最大アップロードサイズ
upload_max_filesize = 500M

;タイムアウト時間
max_execution_time = 300
max_input_time = 300

※今回は400MのDBデータをインポートするために「post_max_size」「upload_max_filesize」を500Mに変更しました。他は適当です。

docker-composeのvolumesでphp.iniをマウントする

volumesで「:」より左にローカル環境のphp.iniのパスを記載。右にコンテナ内のパスを記載。
右のパスは先程コンテナ内に入ったphp.iniのパスと一緒です。


services:
  php:
    build: ./docker/php
    volumes:
      - ./public_html:/var/www/html
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini
    depends_on:
      - mysql
    ports:
      - "80:80"

これで無事php.iniを書き換えることができ、WordPressのアップロード容量制限を書き換えられました。

正直遠回りな方法をしているかもしれませんし、WordPressのアップロード制限を解除するだけならhtaccessに書いたほうが早いのかもしれません。php.iniの書き換え方法も他にあるかもしれませんが、今回は私の今後のDocker環境のためにもphp.iniを書き換える形にしました。

コンテナ内に入ってphp.iniの内容をコピーする作業も、もっと良い方法がある気がします。
Volumesマウントの仕組みがよく分かってないので、多分コンテナ内からPCのローカルへファイルをコピーする方法もある気がしますね。

まとめ

いかがでしたでしょうか。当記事がご参考になれば幸いです。
正直DockerやLinuxの使い方が難しくて毎日混乱してます( ;∀;)