J'exécute ceci instance Docker d'un debian linux: jessie avec php 5.6.
Cela fait partie de mon phpinfo:
Comme nous pouvons voir le php.ini
doit être situé à
/usr/local/etc/php
Et voici ce que j'ai dans/usr/local/etc /
Mais il n'y a pas de php.ini dedans.
J'ai d'autre part, j'ai le php.ini à l'intérieur
Alors, d'où exactement mon php.ini est-il chargé?
Nous n'avons même pas de processus php en cours mais le php semble être correct - étant affiché phpinfo à l'écran.
Essayons comme réponse:
Il n'existe pas du tout, ce qui signifie que php exécutera les options par défaut.
Regardez votre fichier docker, il démarre à partir d'un OS "propre", y installe Apache et PHP. Mais il ne copie jamais le fichier php.ini de l'installation PHP dans/usr/local/etc/php. En fait, aux lignes 31 et 32, il crée le répertoire conf.d mais c'est tout.
Je suggère donc, à la fin de votre fichier docker, d'ajouter du code pour copier php.ini-production dans /usr/local/etc/php.ini, et des modifications si nécessaire. Ou utilisez les options par défaut.
Le fichier php.ini par défaut recherché par les images php docker est:
/usr/local/etc/php/php.ini
Vous pouvez le voir dans la sortie de la fonction phpinfo (exécutez simplement "php -a" dans le conteneur puis "phpinfo ();" à l'invite):
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
Vous pouvez toujours lier ce fichier en tant que volume pour en obtenir un personnalisé lorsque vous exécutez le conteneur avec une option -v comme:
docker run -v /local/path/to/php.ini:/usr/local/etc/php/php.ini [OPTIONS] IMAGE [COMMAND] [ARG...]
Je préfère généralement utiliser le fichier ini par défaut qui l'accompagne, avec seulement quelques options modifiées selon mes besoins. Si vous souhaitez que votre conteneur le fasse pendant la génération, vous pouvez faire quelque chose comme ceci dans le 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
Les commandes RUN ci-dessus copient le fichier ini de production par défaut, puis modifient le memory_limit et le définissent sur 4G dans le fichier ini.
Je préfère cette méthode car elle permet d'utiliser des configurations personnalisées afin que le conteneur fonctionne toujours avec les valeurs par défaut lorsqu'il est extrait, mais vous avez toujours la possibilité de remplacer le fichier ini dans le conteneur en passant un volume.
Un peu tard pour la fête mais comme la question est toujours d'actualité aujourd'hui, permettez-moi d'ajouter une réponse courte:
PHP officiel: 7 images obtiennent leurs paramètres de /usr/local/etc/php
dossier.
# 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
Si nécessaire, la modification des paramètres via le dossier conf.d semble une meilleure alternative, car xdebug l'utilise. Par exemple, vous pouvez modifier la taille du téléchargement en ajoutant uploads.ini
à conf.d
dossier avec le contenu suivant:
file_uploads = On
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600
La liste complète des directives ini est disponible sur https://www.php.net/manual/en/ini.core.php
En bref, vous n'en avez pas besoin. Si vous manquez ou souhaitez ajouter des extensions, vous pouvez le faire dans votre Dockerfile en faisant docker-php-ext-install
ou docker-php-ext-enable
.
La plupart des plus courants, vous pouvez simplement activer, comme mbstring par exemple, mais pour certains moins courants, vous devrez peut-être exécuter pecl
en premier ou quelque chose pour obtenir le package. Jetez un oeil à cette page de documentation Docker pour plus d'informations sur les extensions php