PHP-FPM Alpine DockerImage 7.4安装PHP版本8.0

PHP-FPM Alpine Docker Image 7.4 installs PHP version 8.0

自从昨天最新的 php fpm docker 图像更新 (https://hub.docker.com/_/php?tab=tags&page=1&name=fpm-alpine) 以来,我的管道坏了,因为显然 PHP 安装了版本 8 而不是我的 7.4指定了 Dockerfile。

我在我的 docker 文件中使用它:

FROM php:7.4-fpm-alpine AS ...

但是根据我的作曲家安装容器有 PHP 8.0.13 运行:

 Root composer.json requires php 7.4.26 but your php version (8.0.13) does not satisfy that requirement.

有人知道这是怎么回事吗?

我今天遇到了同样的问题...

尝试:

  • composer install --no-scripts --ignore-platform-reqs

帮我修好了。

代码和想法来自 https://whosebug.com/users/564000/armin

我可能遇到了同样的问题。那些 alpine PHP 图像不包括作曲家,那么你如何安装它?如果您使用的是 apk,看起来 latest alpine composer package 正在将 php8 作为依赖项拉入。为我解决这个问题的方法是使用 getcomposer.org 中的安装脚本而不是使用 apk 安装 composer。 假设这是你正在做的,从你的 Dockerfile 中删除它:

RUN apk add composer

并添加:

ADD https://getcomposer.org/installer ./composer-setup.php
RUN php ./composer-setup.php --install-dir=/usr/local/bin --filename=composer
RUN rm ./composer-setup.php

如果composer确实包含在你的基础镜像中,你可以先尝试卸载:

RUN apk delete composer

然后添加上面的代码以从安装脚本安装它。

编辑:添加 ignore-platform-reqs 标志可能会让你克服错误,但如果你有作曲家,你会在未来引入一个可能的失败点具有平台要求的包。在这种情况下,您直到运行时才会知道错误。我不推荐这种方法。我在上面发布的方法将使用系统上已有的 PHP 版本安装作曲家,并且不需要有风险的解决方法。

正如 Jeremy Brooks 已经提到的,Alpine 发布了 3.15 版,其中 composer 需要 PHP 8 (https://pkgs.alpinelinux.org/package/v3.15/community/x86_64/composer)。不是从 getcomposer.org 安装作曲家,另一种解决方案是使用 Alpine 3.14:

FROM php:7.4-fpm-alpine3.14 AS ...

我目前正在处理我的 docker-compose 文件以安装 laravel 8 和 php 8.

我测试了“php:7.4-fpm-alpine”,当我访问容器时,我得到了这个版本的 php :

/var/www/html # php --version  
PHP 7.4.26 (cli) (built: Nov 30 2021 08:21:51) ( NTS )

你可以自己测试一下:

docker container ls
docker exec -it <container_id> sh
php --version

我在安装“php:8.0-fpm-alpine”时得到 PHP 8.0.13

另外,我正在使用 composer image 创建我的 laravel 项目,我没有在本地安装 php/composer。您可能会看一看,因为它可能很快就会造成混淆 ;-)