我正在 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/*
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这原来是由我正在加载的扩展引起的。在 docker/php-fpm/Dockerfile 中,我安装了 php-xdebug ,这导致容器加载 PHP8.2
指定8.1版本
php8.1-xdebug解决了问题。感谢 luispabon 对我在 GitHub 上提出的问题的回应,他认为这一定是图像的问题。 https://github.com/phpdocker-io/base-images/issues/ 62
蜘蛛趴一趴
https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91