2017-12-01 3 views
1

Ich versuche laden ein Docker Bild auf Alpine Linux basiert zu erstellen, die PHP 7.1 (apk add php7=7.1.9-r0) mit einigen installierten Module laufen (memcached, mongodb, oauth, openssl und redis) .PHP7 nicht Memcached und redis auf Alpine Docker Container

installiere ich die Module durch PECL wie folgt aus:

RUN yes | pecl install \ 
    igbinary \ 
    redis-3.1.4 \ 
    oauth-2.0.2 \ 
    memcached-3.0.4 \ 
    mongodb-1.3.3 

Dann wird jeder von ihnen zu php.ini hinzuzufügen.

RUN for EXT in \ 
    igbinary \ 
    memcached \ 
    mongodb \ 
    oauth \ 
    openssl \ 
    redis; \ 
    do \ 
    echo "extension=${EXT}.so" >> /etc/php7/php.ini; \ 
    done 

Die meisten Module installieren richtig, aber memcached und redis wollen nicht zusammen spielen:

# php -v 
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php7/modules/memcached.so' - Error relocating /usr/lib/php7/modules/memcached.so: php_session_create_id: symbol not found in Unknown on line 0 
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php7/modules/redis.so' - Error relocating /usr/lib/php7/modules/redis.so: php_session_register_module: symbol not found in Unknown on line 0 
PHP Warning: Module 'openssl' already loaded in Unknown on line 0 
PHP Warning: Cannot load module 'mongodb' because required module 'json' is not loaded in Unknown on line 0 
PHP 7.1.9 (cli) (built: Oct 2 2017 20:51:54) (NTS) 
Copyright (c) 1997-2017 The PHP Group 
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies 

ich auch von der Quelle versucht haben:

RUN git clone https://github.com/php-memcached-dev/php-memcached 
RUN cd php-memcached \ 
    && git checkout php7 \ 
    && git pull \ 
    && /usr/bin/phpize \ 
    && ./configure --with-php-config=/usr/bin/php-config \ 
    && make \ 
    && make install 

Das bin ich jedoch gibt das gleiche Ergebnis. Ich habe ein wenig gesucht und anscheinend gibt es ein ähnliches Problem von glibc auf Alpine (example thread), aber ich bin nicht ganz sicher, dass dies das gleiche Problem ist, da die Fehlerausgabe ein bisschen verwirrend ist.

Gibt es irgendetwas, das ich übersehen habe, wie diese Module installiert werden sollten, um mit PHP 7.1 auf Alpine Linux zu funktionieren?

+0

Bitte post complete Dockerfile, das Sie –

Antwort

2

Alle diese Erweiterungen sind in Alpine-Repositories verfügbar. Warum machen Sie Ihr Leben härter und installieren sie direkt von PECL? Installieren Sie sie einfach mit apk.

Beachten Sie, dass diese Pakete in Alpine v3.7 sind (die neueste stabile Release), habe ich nicht überprüft, ob sie auch verfügbar sind n ältere Versionen.

Diese Pakete installieren natürlich die Konfigurationsdateien mit extension=<ext>.so, also fügen Sie sie nicht manuell zu php.ini hinzu.


apk add php7=7.1.9-r0

Warum geben Sie genaue Version? Dies wird fehlschlagen, sobald wir das Paket aktualisiert haben (z. B. mit Sicherheitspatches), da nur die neueste Version der Pakete in den Repositories verfügbar ist. Wir portieren nur Sicherheitsfixes und Bugfixes (d. H. Patch-Versionen) in stabile Versionen zurück, so dass es in Version 3.6 oder 3.7 keine 7.2.x gibt.

+0

verwendet haben wir spezifizieren bestimmte Version, so dass sie fehlschlagen, nach denen wir beurteilen, was damit manuell zu tun ist und dann wahrscheinlich nur aktualisieren Sie die Dockerfile. –

0

Wir hatten ähnliche Probleme mit den "offiziellen" PHP-Images, die auf Alpine basieren. Ie. Es war unmöglich, eine funktionierende ImageMagick-Version in PHP 7.1 zu installieren, die auf Alpine 3 basiert.4

Was wir getan haben, ist installing it from Alpine 3.6, während ich dies nicht wirklich empfehlen wird, könnte es eine Problemumgehung sein.

Die andere Problemumgehung ist, auf PHP 7.2 zu warten, das auf Alpine 3.6 aufgebaut wird. Könnte eine Option sein für eine funktionierende PHP + Alpine Kombination zu suchen, da Sie FROM alpine bauen und nicht FROM php:alpine

Nur zu sagen: da wir Tonnen von Stunden Themen wie das machte uns zu Debian Bilder zurück, auf verschwendet das, einschließlich seltsamer Glibc-Probleme, wie du erwähnt hast.

1

PHP 7.2 Und weiter auf Alpine 3.7 Wich hat alle notwendigen Erweiterungen im Repository zur Verfügung. Allerdings gibt es PHP 7.1 und PHP 7.0, die immer noch auf 3.4 basieren, die keine php7- * Erweiterungen haben.

Problemumgehung ist die Installation von pecl, die ihrerseits alle erforderlichen Erweiterungen installieren kann.

Sie können dies auf diese Weise erreichen:

RUN apk update\ 
    && apk upgrade \ 
    && apk add libmemcached \ 
    libmemcached-libs \ 
    libmemcached-dev \ 
    build-base \ 
    zlib-dev \ 
    php5-dev \ 
    git \ 
    autoconf \ 
    cyrus-sasl-dev \ 
    && pecl config-set php_ini /usr/local/etc/php/php.ini \ 
    && pecl install -f memcached \ #Add any Additional packages 
    && echo extension=memcached.so >> /usr/local/etc/php/conf.d/docker-php-ext-memcached.ini \ 
    && rm -rf /tmp/pear \ 
    && apk del php5-dev \ 
    build-base \ 
    zlib-dev \ 
    php5-dev \ 
    git \ 
    autoconf \ 
    cyrus-sasl-dev 

Dies wird PECL installieren mit php5, die perfekt funktioniert Erweiterungen für PHP installieren 7+

Und vergessen Sie nicht, Ihre Pakete umfassen

Verwandte Themen