PHP-FPM Alpine Docker Image 7.4安装PHP 8.0版本



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

我在我的docker文件中使用这个:

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

但根据我的composer安装,容器运行PHP 8.0.13:

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

有人知道这里发生了什么吗?

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

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

您引用的alpine PHP映像不包括composer,那么您是如何安装它的呢?如果您使用apk来安装composer,那么最新的alpine composer包似乎将php8作为依赖项引入,这就是您的问题所在。对我来说,解决这个问题的是使用getcomposer.org中的安装脚本安装composer,而不是使用apk。假设这就是你正在做的,将其从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标志可能会使您克服错误,但如果您有一个具有平台需求的composer包,那么您将在未来引入一个可能的故障点。在这种情况下,直到运行时您才知道错误。我不建议采取这种做法。我上面发布的方法将使用系统上已经存在的PHP版本安装composer,并且不需要冒险的解决方案。

我目前正在处理我的docker compose文件,以安装带有php 8的laravel 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";

此外,我正在使用composer映像创建我的laravel项目,我没有在本地安装php/compooser。你可能会看一看,因为它很快就会让人困惑;-(

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

尝试:

  • composer安装--无脚本--忽略平台请求

为我修复了它。

代码和理念来自https://stackoverflow.com/users/564000/armin

最新更新