1. HOME
  2. ブログ
  3. エンジニアリング
  4. 【Docker】php-fpmのphp.iniの値を設定する方法

BLOG

ブログ

エンジニアリング

【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で共有する方法をとるべきではないでしょう。

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

関連記事