我正在 PHP-FPM docker 容器上運行我的專案(下面是設定檔的詳細資訊)。當我建立容器並嘗試運行 Composer 時,我收到錯誤報告缺少 PHP 擴充功能。但是,我認為我的建置檔案涵蓋了這些擴充功能(請參閱下面的 docker/php-fpm/Dockerfile
)。
事實證明,容器是使用 php8.2 作為預設版本建構的。我已經能夠更改符號連結以將預設版本設定回 php8.1 但這似乎不是正確的解決方案。誰能提出更好的解決方案?
我如何知道容器正在運行 8.2:
在容器內我運行 php --version
並得到:
root@fee8cc9ff790:/application# php --version PHP 8.2.0 (cli) (built: Dec 8 2022 13:56:08) (NTS)
然後 which php
給了我:
root@fee8cc9ff790:/application# which php /usr/bin/php
我按照符號連結找到了 /etc/alternatives
中連結的 PHP 二進位檔案:
phar -> /usr/bin/phar8.2 phar.phar -> /usr/bin/phar.phar8.2 php -> /usr/bin/php8.2 phpdbg -> /usr/bin/phpdbg8.2
這對我來說似乎不太合適。我能夠將它們重新連結到它們的 8.1 版本,現在一切似乎都運作良好,但是當我重建容器時會發生什麼?
我的文件詳細資料:
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