我有一個運行 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.
我覺得眼花繚亂的是,作曲家錯誤地識別了 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
上述所有命令(不包括 docker 命令)都在容器中運行
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
uj5u.com熱心網友回復:
呵呵。這讓我有點吃驚。
如前所述,composer 正在報告它正確使用的 PHP 版本。問題不在于使用“正確”的 PHP 解釋器。
問題的出現是因為您安裝 composer 的方式。
顯然,通過apk add composer安裝另一個版本的 PHP(您可以在 上找到它/usr/bin/php8,這是 8.0.14 版上的那個)。
apk您可以手動安裝,而不是讓Composer 為您安裝。在任何情況下都沒有什么可安裝的,無需通過包管理器。
我剛剛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 PHAR 檔案,并將其添加到影像中,具體取決于您想要的方式。
現在只有一個 PHP 版本,composer 可以在 PHP 8.1.1 上正確運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/390047.html
上一篇:DockerizeNodejsPython專案(使用Dockerfile)
下一篇:Docker不會安裝
