Composer, импортированный из репозитория, не распознает некоторые встроенные расширения PHP (Docker).Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Composer, импортированный из репозитория, не распознает некоторые встроенные расширения PHP (Docker).

Сообщение Anonymous »

Я пытаюсь установить зависимости проекта с помощью Composer в контейнере Docker на основе образа php:8.3-fpm-alpine. Этот образ включает PHP с несколькими расширениями, скомпилированными и интегрированными в двоичный файл PHP, что подтверждено функцией phpinfo():

Код: Выделить всё

Configuration File (php.ini) Path
=> /usr/local/etc/php
________________________________________________________________

Configuration
Core

PHP Version => 8.3.15

extension_dir => /usr/local/lib/php/extensions/no-debug-non-zts-20230831
include_path => .:/usr/local/lib/php => .:/usr/local/lib/php

Tokenizer Support => enabled
Session Support   => enabled
fileinfo support  => enabled
SimpleXML support => enabled
DOM/XML           => enabled
ctype functions   => enabled
cURL support      => enabled
hash support      => enabled
iconv support     => enabled
json support      => enabled
Multibyte Support => enabled
OpenSSL support   => enabled
PCRE Support      => enabled
Phar              => enabled
sodium support    => enabled
XML Support       => active
libXML support    => active
XMLReader         => enabled
XMLWriter         => enabled
Однако, когда я выполняю команду установки композитора, Composer не может распознать доступность некоторых из этих расширений. Команда композитора check-platform-reqs подтверждает это:

Код: Выделить всё

ext-dom          n/a    missing
ext-fileinfo     n/a    missing
ext-session      n/a    missing
ext-tokenizer    n/a    missing
ext-xml          n/a    missing
ext-xmlwriter    n/a    missing
Ошибки, которые я получаю во время установки композитора:

Код: Выделить всё

Problem 1..N
- requires ext-session *
- requires ext-fileinfo *
- requires ext-tokenizer *
- requires ext-dom *

* -> it is missing from your system. Install or enable PHP's session extension.

Your lock file does not contain a compatible set of packages.
Please run composer update.

To enable extensions, verify that they are enabled in your .ini files:
- /etc/php83/php.ini
- /etc/php83/conf.d/00_curl.ini
- /etc/php83/conf.d/00_iconv.ini
- /etc/php83/conf.d/00_mbstring.ini
- /etc/php83/conf.d/00_openssl.ini
- /etc/php83/conf.d/00_zip.ini
- /etc/php83/conf.d/01_phar.ini
Результаты диагностики композитора:

Код: Выделить всё

Checking composer.json: OK
Checking composer.lock: OK
Checking platform settings: OK
Checking git settings: No git process found
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
Missing pubkey for tags verification
Missing pubkey for dev verification

Run composer self-update --update-keys to set them up
Checking Composer version: OK
Checking Composer and its dependencies for vulnerabilities: OK
Composer version: 2.8.4
PHP version: 8.3.15
PHP binary path: /usr/bin/php83
OpenSSL version: OpenSSL 3.3.2 3 Sep 2024
curl version: 8.11.1 libz 1.3.1 ssl OpenSSL/3.3.2
zip: extension present, unzip present, 7-Zip present (7z)
Мой файл Docker:

Код: Выделить всё

FROM php:8.3-fpm-alpine

WORKDIR /var/www/html
COPY --chown=www-data:www-data --chmod=755 composer.json composer.lock .

RUN apk update \
&& apk upgrade \
&& apk add --no-cache \
libpq-dev \
libzip-dev \
libpng-dev \
libjpeg-turbo-dev \
freetype-dev \
composer \
&& docker-php-ext-configure zip \
&& docker-php-ext-configure pdo_pgsql --with-pdo-pgsql=/usr/include/ \
&& docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd pdo pgsql pdo_pgsql \
&& docker-php-ext-enable gd pgsql pdo pdo_pgsql \
&& rm -vrf /var/cache/apk/* \
&& composer install

USER www-data

EXPOSE 9000
CMD ["php-fpm"]
Я попробовал установить Composer в образ Docker, используя следующую команду:

Код: Выделить всё

COPY --from=composer/composer:latest-bin /composer /usr/bin/composer
Однако этот метод также не решил проблему.
После дальнейшего изучения проблемы я обнаружил, что ручная установка Composer в контейнере Docker решила проблему. несоответствие между phpinfo() и обнаружением расширения Composer. Я использовал следующие методы с официального сайта Composer:
Метод 1:

Код: Выделить всё

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Метод 2: программная установка
Проверка.
После установки Composer вручную я выполнил проверку композитора: платформа-reqs еще раз. На этот раз все необходимые расширения были успешно обнаружены:

Код: Выделить всё

ext-dom        20031129    success
ext-fileinfo     8.3.15    success
ext-session      8.3.15    success
ext-tokenizer    8.3.15    success
ext-xml          8.3.15    success
ext-xmlwriter    8.3.15    success
Результаты диагностики композитора:

Код: Выделить всё

Checking composer.json: OK
Checking composer.lock: OK
Checking platform settings: OK
Checking git settings: No git process found
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:
Tags Public Key Fingerprint: 57815BA2 7E54DC31 7ECC7CC5 573090D0  87719BA6 8F3BB723 4E5D42D0 84A14642
Dev Public Key Fingerprint: 4AC45767 E5EC2265 2F0C1167 CBBB8A2B  0C708369 153E328C AD90147D AFE50952
OK

Checking Composer version: OK
Checking Composer and its dependencies for vulnerabilities: OK
Composer version: 2.8.4
PHP version: 8.3.15
PHP binary path: /usr/bin/php83
OpenSSL version: OpenSSL 3.3.2 3 Sep 2024
curl version: 8.11.1 libz 1.3.1 ssl OpenSSL/3.3.2
zip: extension present, unzip present, 7-Zip present (7z)
Я попытался добавить ключи SSH (открытый ключ, открытый ключ разработчика), чтобы проверить, влияют ли проблемы аутентификации на поведение Composer. Однако проблему это не решило.
Не могу понять, кто именно вызывает ошибку: композитор или сам репозиторий.
Поскольку я сталкиваюсь с неожиданным поведением, когда Composer не распознает расширения PHP, которые явно включены в контейнере Docker, и я не очень знаком с тонкостями поведения Composer, я был бы очень признателен за любые идеи или предложения от сообщества.
Кроме того, я хотел бы узнать о самом безопасном способе установки Composer в образ Docker. Загрузка установщика непосредственно с интернет-ресурса в образе может быть не самым безопасным и надежным подходом. Существуют ли какие-либо рекомендуемые рекомендации по установке Composer в среде Dockerized?


Подробнее здесь: https://stackoverflow.com/questions/793 ... hp-extensi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»