我在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 clean; \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
1条答案
按热度按时间oaxa6hgo1#
这原来是由我加载的扩展引起的。在
docker/php-fpm/Dockerfile
中,我安装了php-xdebug
,这导致容器加载PHP8.2指定8.1版本
php8.1-xdebug
解决了该问题。感谢luispabon对我在GitHub上提出的问题的回应,他认为这一定是图像的问题。https://github.com/phpdocker-io/base-images/issues/62