私はこれをphp 5.6で実行しています linux debian:jessieのDockerインスタンス 。
これは私のphpinfoの一部です:
ご覧のとおり、php.ini
は次の場所にあります
/usr/local/etc/php
そして、これは/ usr/local/etc /の中にあります
しかし、その中にphp.iniはありません。
一方、php.iniは内部にあります
それで、私のphp.iniはどこからロードされていますか?
Phpプロセスも実行していませんが、phpは問題ないようです-画面にphpinfoが表示されています。
答えとして試してみましょう:
これはまったく存在しません。つまり、phpはデフォルトのオプションを実行します。
Dockerファイルを見てください。「クリーン」なOSから始まり、ApacheとPHPがインストールされます。ただし、php.iniファイルをPHPインストールから/ usr/local/etc/phpにコピーすることはありません。実際には31行目と32行目にconf.dディレクトリが作成されますが、それだけです。
そのため、Dockerファイルの最後に、php.ini-productionを/usr/local/etc/php.iniにコピーするコードを追加し、必要に応じて編集することをお勧めします。または、デフォルトのオプションを使用します。
Docker phpイメージが探すデフォルトのphp.iniファイルは次のとおりです。
/usr/local/etc/php/php.ini
これは、phpinfo関数の出力で確認できます(コンテナーで「php -a」を実行し、プロンプトで「phpinfo();」を実行します)。
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
次のように-vオプションを指定してコンテナを実行すると、いつでもこのファイルをボリュームとしてリンクしてカスタムファイルを取得できます。
docker run -v /local/path/to/php.ini:/usr/local/etc/php/php.ini [OPTIONS] IMAGE [COMMAND] [ARG...]
私は通常、付属のデフォルトのiniファイルを使用することを好みます。必要に応じてオプションをいくつか変更しただけです。ビルド中にコンテナーにこれを実行させる場合は、Dockerfileで次のようなことを実行できます。
RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini && \
sed -i -e "s/^ *memory_limit.*/memory_limit = 4G/g" /usr/local/etc/php/php.ini
上記のRUNコマンドは、デフォルトのプロダクションiniファイルをコピーしてから、memory_limitを変更し、iniファイルで4Gに設定します。
カスタム構成を使用できるので、プルしたときにコンテナーは常にデフォルトで動作しますが、ボリュームを渡すことでコンテナー内のiniファイルをオーバーライドするオプションがあるため、この方法を使用します。
パーティーには少し遅れますが、質問は今日でも関連があるので、短い回答を追加しましょう。
公式のphp:7画像は/usr/local/etc/php
フォルダーから設定を取得します。
# First log into the running container
$ docker exec -it «container_name» /bin/bash
# List folder content
$ ls /usr/local/etc/php
# Which outputs following line
conf.d php.ini-development php.ini-production
必要に応じて、xdebugがconf.dフォルダーを使用するため、conf.dフォルダーを介して設定を変更する方が良いと思われます。たとえば、uploads.ini
フォルダーにconf.d
フォルダーを追加して、次の内容でアップロードサイズを変更できます。
file_uploads = On
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600
Iniディレクティブの完全なリストは https://www.php.net/manual/en/ini.core.php にあります。
短い答えは、あなたはそれを必要としないということです。不足している場合や拡張機能を追加したい場合は、Dockerfileでdocker-php-ext-install
またはdocker-php-ext-enable
。
一般的なもののほとんどは、たとえばmbstringなどのように単純に有効にすることができますが、一般的でないものについては、最初にpecl
を実行してパッケージを取得する必要がある場合があります。 PHP拡張機能の詳細については、 このDockerドキュメントページをご覧ください