J'exécute mon projet sur un conteneur Docker PHP-FPM (détails du fichier de configuration ci-dessous). Lorsque je crée le conteneur et que j'essaie d'exécuter Composer, j'obtiens une erreur signalant que l'extension PHP est manquante. Cependant, je pense que mes fichiers de build couvrent ces extensions (voir docker/php-fpm/Dockerfile
ci-dessous).
Il s'avère que le conteneur a été construit avec php8.2 comme version par défaut. J'ai pu modifier le lien symbolique pour rétablir la version par défaut sur php8.1 mais cela ne semble pas être la bonne solution. Quelqu'un peut-il suggérer une meilleure solution ?
Comment savoir si le conteneur exécute la version 8.2 :
À l'intérieur du conteneur, je cours php --version
et j'obtiens :
root@fee8cc9ff790:/application# php --version PHP 8.2.0 (cli) (built: Dec 8 2022 13:56:08) (NTS)
Puis which php
m'a donné :
root@fee8cc9ff790:/application# which php /usr/bin/php
J'ai suivi le lien symbolique vers le binaire PHP lié dans /etc/alternatives
:
phar -> /usr/bin/phar8.2 phar.phar -> /usr/bin/phar.phar8.2 php -> /usr/bin/php8.2 phpdbg -> /usr/bin/phpdbg8.2
Cela ne me semble pas correct. J'ai pu les relier à leurs versions 8.1 et tout semble bien fonctionner maintenant, mais que se passe-t-il lorsque je reconstruis le conteneur ?
Détails de mon dossier :
docker-compose.yml
############################################################################### # Generated on docker.io # ############################################################################### version: '3.9' services: mailhog: image: 'mailhog/mailhog:latest' redis: image: 'redis:alpine' mysql: image: 'mysql:8.0.27' working_dir: /application platform: linux/amd64 environment: - MYSQL_ROOT_PASSWORD= - MYSQL_DATABASE= - MYSQL_USER= - MYSQL_PASSWORD= webserver: image: 'nginx:alpine' working_dir: /application volumes: - '.:/application' - './docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf' php-fpm: build: docker/php-fpm working_dir: /application/ volumes: - '.:/application' - './docker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini' - './docker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/cli/conf.d/99-overrides.ini'
docker-compose.override.yml
############################################################################### # Generated on phpdocker.io # ############################################################################### version: '3.9' services: mailhog: ports: - '8026:8025' mysql: ports: - '33061:3306' webserver: ports: - '801:80'
docker/php-fpm/Dockerfile
FROM phpdockerio/php:8.1-fpm WORKDIR "/application" RUN apt-get update; apt-get -y --no-install-recommends install git php-xdebug php8.1-mysql php8.1-sqlite mysql-client php8.1-redis; apt-get clea n; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
Cela s'est avéré être dû à une extension que je chargeais. Dans docker/php-fpm/Dockerfile, j'ai installé php-xdebug, ce qui a provoqué le chargement de PHP8.2
par le conteneur.Spécifier la version 8.1
php8.1-xdebug
a résolu le problème.Merci à Luispabon d'avoir répondu à ma question sur GitHub, il a pensé que cela devait être un problème avec les images. https://github.com/phpdocker-io/base-images/issues/ 62