我有一个码头形象运行8.0,并希望升级到8.1。我已经更新了映像,以便使用PHP8.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.我发现令人眼花缭乱的是,编写人员不正确地识别PHP版本。我使用了两个命令来确定:
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)到目前为止,我已经尝试过:
php -v作曲家版本2.1.12 2021-11-09 16:02:04
composer check-platform-reqs | grep php
# returns:
# ...
# php 8.0.14 project/name requires php (^8.1) failed 上面的所有命令(不包括停靠器命令)都在容器中运行。
Dockerfile:
FROM php:8.1.1-fpm-alpine3.15
ENV TZ=Europe/London
# Install php lib deps
RUN apk update && apk upgrade
RUN apk add --update libzip-dev \
zip \
unzip \
libpng-dev \
nginx \
supervisor \
git \
curl \
shadow \
composer \
yarn && rm -rf /var/cache/apk/*
RUN usermod -u 1000 www-data
RUN usermod -d /var/www www-data
RUN mkdir -p /run/nginx && chown www-data:www-data /run/nginx
ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.9/supercronic-linux-amd64 \
SUPERCRONIC=supercronic-linux-amd64 \
SUPERCRONIC_SHA1SUM=5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85
RUN curl -fsSLO "$SUPERCRONIC_URL" \
&& echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \
&& chmod +x "$SUPERCRONIC" \
&& mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
&& ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic
# Install and enable php extensions
RUN docker-php-ext-install sockets mysqli pdo_mysql zip gd bcmath > /dev/null
ARG ENV="development"
# Xdebug install
RUN if [ $ENV = "development" ] ; then \
apk add --no-cache $PHPIZE_DEPS; \
pecl install xdebug > /dev/null; \
docker-php-ext-enable xdebug; \
echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
fi ;
# Setup working directory
RUN chown -R www-data:www-data /var/www
WORKDIR /var/www
USER www-data
# Install dependencies
#RUN if [ $ENV = "development" ] ; then \
## composer install -n; \
# else \
## composer install -n --no-dev; \
# fi ;
# Generate doctrine proxies发布于 2021-12-22 10:35:52
哈。这让我有点吃惊。
composer正确地报告了它使用的PHP版本。问题是它没有使用“正确”的PHP解释器。
问题的出现是因为您是如何安装composer的。
显然,通过执行apk add composer,可以安装另一个版本的PHP (您可以在/usr/bin/php8上找到它,这是8.0.14版本上的版本)。
您可以手动完成,而不是让apk安装编写器为您服务。在任何情况下都没有什么可安装的,不需要通过包管理器。特别是因为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') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { 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;您还可以从这里下载最新的composer文件,并将其添加到图像中,这取决于您想要怎样做。
现在只有一个PHP版本,composer将在PHP8.1.1上正确运行。
发布于 2022-04-15 20:53:24
这也让我大吃一惊,尤其是在开发或构建他们自己的PHP版本(例如在阿尔卑斯变体中的正式PHP停靠图像)时,这没有什么意义。
不受限制,但在阿尔卑斯思想上进行了测试,这里是一个带有校验和验证的特定编写器版本的安装变体( 作曲家下载页面包含所有版本和校验和):
FROM php:8.1-alpine
ARG COMPOSER_BIN=/usr/bin/composer
ARG COMPOSER_VERSION=2.2.12
ARG COMPOSER_SHA256SUM=1ce90687eb3f89a99c059d45dd419d08430ed249468544b932b1dad7fb22dda0
RUN set -ex ;\
wget -O "$COMPOSER_BIN" "https://getcomposer.org/download/$COMPOSER_VERSION/composer.phar" ;\
printf "%s %s\n" "$COMPOSER_SHA256SUM" "$COMPOSER_BIN" | sha256sum -c - ;\
chmod +x -- "$COMPOSER_BIN" ;\
composer --version ;\
composer diagnose || printf 'composer diagnose exited: %d\n' $? ;\
:产出(典范):
Sending build context to Docker daemon 2.048kB # (1)
Step 1/5 : FROM php:8.1-alpine
---> 77506786976c
Step 2/5 : ARG COMPOSER_BIN=/usr/bin/composer
---> Running in 71db8206ae0b
Removing intermediate container 71db8206ae0b
---> 77432ca0a59a
Step 3/5 : ARG COMPOSER_VERSION=2.2.12
---> Running in 5d0e6f5bee3d
Removing intermediate container 5d0e6f5bee3d
---> 273a0d9d2936
Step 4/5 : ARG COMPOSER_SHA256SUM=1ce90687eb3f89a99c059d45dd419d08430ed249468544b932b1dad7fb22dda0
---> Running in 504ad490732a
Removing intermediate container 504ad490732a
---> e56499db14c7
Step 5/5 : RUN set -ex ; wget -O "$COMPOSER_BIN" "https://getcomposer.org/download/$COMPOSER_VERSION/composer.phar" ; printf "%s %s\n" "$COMPOSER_SHA256SUM" "$COMPOSER_BIN" | sha256sum -c - ; chmod +x -- "$COMPOSER_BIN" ; composer --version ; composer diagnose || printf 'composer diagnose exited: %d\n' $? ; :
---> Running in 10c303e61d27
+ wget -O /usr/bin/composer https://getcomposer.org/download/2.2.12/composer.phar
Connecting to getcomposer.org (54.36.53.46:443)
saving to '/usr/bin/composer'
composer 100% |********************************| 2312k 0:00:00 ETA
'/usr/bin/composer' saved
+ printf '%s %s\n' 1ce90687eb3f89a99c059d45dd419d08430ed249468544b932b1dad7fb22dda0 /usr/bin/composer
+ sha256sum -c -
/usr/bin/composer: OK
+ chmod +x -- /usr/bin/composer
+ composer --version
Composer version 2.2.12 2022-04-13 16:42:25
+ composer diagnose
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking pubkeys: FAIL # (2)
Missing pubkey for tags verification
Missing pubkey for dev verification
Run composer self-update --update-keys to set them up
Checking composer version: You are not running the latest stable version, run `composer self-update` to update (2.2.12 => 2.3.5)
Composer version: 2.2.12
PHP version: 8.1.4
PHP binary path: /usr/local/bin/php
OpenSSL version: OpenSSL 1.1.1n 15 Mar 2022
cURL version: 7.80.0 libz 1.2.12 ssl OpenSSL/1.1.1n
zip: extension not loaded, unzip present, 7-Zip not available
+ printf 'composer diagnose exited: %d\n' 2
+ :
composer diagnose exited: 2
Removing intermediate container 10c303e61d27
...self-update命令一起使用。由于这个版本是在没有安装程序的情况下安装的,所以没有设置它们.它不需要安装程序(因此没有公开键),并将版本(对于稳定的构建来说,您需要通过https将安装程序版本或获取安装程序的校验和),Composer在它们的文档中概述了它:https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md;这是额外的信息,因为先前的答案没有明确提到这一点)。
我已经将composer诊断命令放到了build部分,这样它至少显示了一个很好的概述(从组合者的角度来看),并可能提供一些关于如何根据基本图像和配置来改进映像的提示。例如,安装附加的命令行实用程序,在构建映像中,您可能希望与composer一起使用git(1),而不仅仅是解压缩(1)。
https://stackoverflow.com/questions/70439028
复制相似问题