【Docker】php-fpmのphp.iniの値を設定する方法
手順
変更したい設定値を記述したファイルを作成
例:アップロードサイズを変更したい場合
uploads.iniを作成
upload_max_filesize=200M
post_max_size = 200M
ディレクトリ構成はなんでも構いませんが、以下のような構成を想定します。
.
├── docker/
│ └── php/
│ └── conf/
│ └── uploads.ini
│ └── Dockerfile
│
└── compose.yml
Dockerコンテナにiniファイルをコピー
以下の行を追加します。
FROM php:XX-fpm
# ...各種コマンド...
COPY ./conf "$PHP_INI_DIR/conf.d"
ビルド
docker compose up -d --build
仕組み
php-fpmイメージは、デフォルトで php.ini-development
, php.ini-production
を持っています。
実際にbuildしてコンテナの中身をみてみると、以下のようになっています。
cd /usr/local/etc/php
ls -al
drwxr-xr-x 1 root root 4096 Jul 29 06:16 conf.d
-rw-r--r-- 1 root root 73397 Jun 13 05:43 php.ini-production
-rw-r--r-- 1 root root 73251 Jun 13 05:43 php.ini-development
公式サイトによると、php.ini-productionを使い、/conf.dで設定値を上書きすることが推奨されています。したがって、Dockerfileは以下のようになります。
FROM php:XX-fpm
# ...各種コマンド...
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
COPY ./conf "$PHP_INI_DIR/conf.d"
よく見る間違い
ネットで検索すると、 compose.yml
中で volumes
を使って解決している例が見られるがこれは誤り。
php:
# 省略
volumes:
- ./docker/php/conf:/usr/local/etc/php/conf.d
確かにこれで該当の箇所にiniファイルが置かれますが、php-fpmのビルド時やextensionを入れた時に生成されるiniファイルが消えてしまいます。
例えば、mysqlのextensionを入れたとします。
RUN docker-php-ext-install pdo_mysql
dockerコンテナ内の
/usr/local/etc/php/conf.d
を見てみると、以下のiniファイルが作成されています。
docker-php-ext-pdo_mysql.ini
php.iniの設定値を上書きするのはホスト側だけとは限らないので、volumesで共有する方法をとるべきではないでしょう。
この記事へのコメントはありません。