Der aus dem Repository importierte Composer erkennt einige integrierte PHP-Erweiterungen (Docker) nicht.Php

PHP-Programmierer chatten hier
Guest
 Der aus dem Repository importierte Composer erkennt einige integrierte PHP-Erweiterungen (Docker) nicht.

Post by Guest »

Ich versuche, Projektabhängigkeiten mit Composer in einem Docker-Container basierend auf dem php:8.3-fpm-alpine-Image zu installieren. Dieses Bild enthält PHP mit mehreren Erweiterungen, die kompiliert und in die PHP-Binärdatei integriert wurden, wie durch phpinfo():
bestätigt

Code: Select all

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
Wenn ich jedoch den Composer-Installationsbefehl ausführe, erkennt Composer die Verfügbarkeit einiger dieser Erweiterungen nicht. Der Composer-Befehl check-platform-reqs bestätigt dies:

Code: Select all

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
Die Fehler, die ich während der Composer-Installation erhalte:

Code: Select all

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
Ergebnisse nach Composer-Diagnose:

Code: Select all

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)
Meine Docker-Datei:

Code: Select all

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"]
Ich habe versucht, Composer im Docker-Image mit dem folgenden Befehl zu installieren:

Code: Select all

COPY --from=composer/composer:latest-bin /composer /usr/bin/composer
Diese Methode löste das Problem jedoch auch nicht.
Nachdem ich das Problem weiter untersucht hatte, stellte ich fest, dass die manuelle Installation von Composer im Docker-Container behoben wurde die Diskrepanz zwischen phpinfo() und der Erweiterungserkennung von Composer. Ich habe die folgenden Methoden von der offiziellen Composer-Website verwendet:
Methode 1:

Code: Select all

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');"
Methode 2: Programmatische Installation
Überprüfung.
Nach der manuellen Installation von Composer habe ich eine Composer-Prüfung durchgeführt. platform-reqs noch einmal. Dieses Mal wurden alle erforderlichen Erweiterungen erfolgreich erkannt:

Code: Select all

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
Ergebnisse nach Composer-Diagnose:

Code: Select all

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)
Ich habe versucht, SSH-Schlüssel (Public Key, Dev Public Key) hinzuzufügen, um zu sehen, ob Authentifizierungsprobleme das Verhalten von Composer beeinflussen. Dies hat das Problem jedoch nicht behoben.
Ich kann nicht herausfinden, wer genau den Fehler verursacht hat, der Composer oder das Repository selbst.
Da ich auf unerwartetes Verhalten stoße, bei dem Composer PHP-Erweiterungen nicht erkennt, die eindeutig im Docker-Container aktiviert sind, und ich mit den Feinheiten des Verhaltens von Composer nicht sehr vertraut bin, würde ich mich über Einblicke oder Vorschläge aus der Community sehr freuen.
Außerdem möchte ich mich nach der sichersten Methode zur Installation von Composer in einem Docker-Image erkundigen. Das direkte Herunterladen des Installationsprogramms von einer Internetressource innerhalb des Images ist möglicherweise nicht der sicherste oder zuverlässigste Ansatz. Gibt es empfohlene Best Practices für die Installation von Composer in einer Docker-Umgebung?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post