And*_*rev 13 php composer-php docker alpine-linux
我有一个运行 8.0 的 docker 映像,想要升级到 8.1。我已更新图像以使用 PHP 8.1 运行,并希望更新其中的依赖项。
新图像源自php:8.1.1-fpm-alpine3.15
我已更新composer.json
并更改require.php
为,^8.1
但在运行时遇到以下消息composer upgrade
:
Root composer.json requires php ^8.1 but your php version (8.0.14) does not satisfy that requirement.
Run Code Online (Sandbox Code Playgroud)
令我眼花缭乱的是,作曲家错误地识别了 PHP 版本。我使用两个命令来确定:
Root composer.json requires php ^8.1 but your php version (8.0.14) does not satisfy that requirement.
Run Code Online (Sandbox Code Playgroud)
到目前为止我已经尝试过:
php -v
作曲家版本 2.1.12 2021-11-09 16:02:04
which php # returns only /usr/local/bin/php
/usr/local/bin/php -v # returns PHP 8.1.1 (cli) (built: Dec 18 2021 01:38:53) (NTS)
Run Code Online (Sandbox Code Playgroud)
上述所有命令(不包括 docker 命令)都在容器中运行
Dockerfile:
composer check-platform-reqs | grep php
# returns:
# ...
# php 8.0.14 project/name requires php (^8.1) failed
Run Code Online (Sandbox Code Playgroud)
yiv*_*ivi 10
呵呵。这让我有点惊讶。
作曲家正确报告了它正在使用的 PHP 版本。问题是它没有使用“正确的”PHP 解释器。
出现此问题的原因在于您安装 Composer 的方式。
显然,通过apk add composer
安装另一个版本的 PHP(您可以在 上找到它/usr/bin/php8
,这是版本 8.0.14 上的版本)。
apk
您可以手动安装,而不是让您为您安装 Composer。无论如何,没有什么需要安装的,不需要通过包管理器。特别是因为 PHP 尚未通过包管理器安装在您的基础映像上。
composer
我刚刚从命令中删除了包含的行apk add --update
,并将其添加到下面的某处:
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" && \
php composer-setup.php && \
php -r "unlink('composer-setup.php');" && \
mv composer.phar /usr/local/bin/composer;
Run Code Online (Sandbox Code Playgroud)
(实际的校验和会因版本而异,应该使用此页面中的适当校验和更新脚本,或者简单地使用获取最新校验和的脚本,如此处所述)。
您还可以简单地从此处下载最新的 Composer PHAR 文件,并将其添加到图像中,具体取决于您想要的方式。
现在有一个 PHP 版本,composer 将在 PHP 8.1.1 上正确运行。
归档时间: |
|
查看次数: |
9108 次 |
最近记录: |