Ich führe mein Projekt auf einem PHP-FPM-Docker-Container aus (Details zur Konfigurationsdatei unten). Wenn ich den Container erstelle und versuche, Composer auszuführen, erhalte ich eine Fehlermeldung, dass die PHP-Erweiterung fehlt. Ich denke jedoch, dass meine Build-Dateien diese Erweiterungen abdecken (siehe docker/php-fpm/Dockerfile
unten).
Es stellt sich heraus, dass der Container mit PHP8.2 als Standardversion erstellt wurde. Ich konnte den Symlink ändern, um die Standardversion auf PHP8.1 zurückzusetzen, aber das scheint nicht die richtige Lösung zu sein. Kann jemand eine bessere Lösung vorschlagen?
Woher weiß ich, dass auf dem Container 8.2 ausgeführt wird:
In den Container renne ich php --version
und erhalte:
root@fee8cc9ff790:/application# php --version PHP 8.2.0 (cli) (built: Dec 8 2022 13:56:08) (NTS)
Dann gab which php
mir:
root@fee8cc9ff790:/application# which php /usr/bin/php
Ich bin dem Symlink zur PHP-Binärdatei gefolgt, die in /etc/alternatives
verlinkt ist:
phar -> /usr/bin/phar8.2 phar.phar -> /usr/bin/phar.phar8.2 php -> /usr/bin/php8.2 phpdbg -> /usr/bin/phpdbg8.2
Das scheint mir nicht richtig zu sein. Ich konnte sie wieder mit ihren 8.1-Versionen verknüpfen und jetzt scheint alles gut zu laufen, aber was passiert, wenn ich den Container neu erstelle?
Meine Dateidetails:
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/*
这原来是由我正在加载的扩展引起的。在 docker/php-fpm/Dockerfile 中,我安装了 php-xdebug ,这导致容器加载 PHP8.2
指定8.1版本
php8.1-xdebug
解决了问题。感谢 luispabon 对我在 GitHub 上提出的问题的回应,他认为这一定是图像的问题。 https://github.com/phpdocker-io/base-images/issues/ 62