#php #docker #composer-php #alpine #php-openssl
Вопрос:
Я создаю образ докера с помощью Alpine, php7.2-fpm и Composer.
Проблема возникает при попытке установить Composer, который использует https для загрузки установщика через php.
Я добавил репозиторий, чтобы иметь возможность устанавливать php7.2 (который используется для установки composer) и его пакеты:
RUN wget -O /etc/apk/keys/phpearth.rsa.pub https://repos.php.earth/alpine/phpearth.rsa.pub amp;amp;
echo "https://repos.php.earth/alpine/v3.7" >> /etc/apk/repositories amp;amp;
apk update
При попытке загрузить composer возникает следующая ошибка:
/ # php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
PHP Warning: copy(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. copy() Command line code:1
PHP Warning: copy(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. copy() Command line code:1
PHP Warning: copy(https://getcomposer.org/installer): failed to open stream: No such file or directory in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. copy() Command line code:1
В поисках этой ошибки все, что я нашел, было связано с расширением php openssl.
При попытке установить расширения php7.2-openssl я получаю следующее сообщение об ошибке:
/ # apk add php7.2-openssl
ERROR: unable to select packages:
php7.2-igbinary (no such package):
required by: world[php7.2-igbinary]
php7.2-msgpack (no such package):
required by: world[php7.2-msgpack]
php7.2-readline (no such package):
required by: world[php7.2-readline]
so:libcrypto.so.42 (no such package):
required by: php7.2-openssl-7.2.16-r0[so:libcrypto.so.42]
so:libssl.so.44 (no such package):
required by: php7.2-openssl-7.2.16-r0[so:libssl.so.44]
Если я принудительно установлю «-f», это будет выглядеть так, как будто он установлен, но на самом деле это не так. apk list php* --installed
Команда не показывает расширение openssl, а запрос https по-прежнему возвращает ту же ошибку https.
Другой способ установки Composer был бы не лучшим для меня. В конце концов, мне все равно придется использовать https через php.
Я использую последнюю версию базового образа Alpine Docker на сегодняшний день. Что означает «3.14.2».
Интересно, имеет ли это какое-то отношение к добавленной версии репозитория (3.7) по сравнению с версией образа (3.14.2).
Я бы хотел понять, что происходит.
Комментарии:
1. Есть ли причина, по которой вы используете «repos.php.earth»? Я не знаю, что в этом такого, но если вы просто ищете PHP, может быть, вам повезет больше с официальным репо? Сборки PHP 7.2 больше не перечислены в списке основных тегов (связаны из основного репозитория ). Но это не обязательно означает, что сборки больше не существуют. Вероятно, есть лучший способ найти их, но вот что я сделал: …
2. При прокрутке этой страницы вниз появляется ссылка на историю git самой страницы . Я прокрутил страницу вниз и выбрал ссылку «12 ноября 2020 года», чтобы посмотреть, как тогда выглядела страница . Конечно же, в списке есть несколько сборок php-fpm 7.2 Alpine. Я попробовал один из них случайным образом, и он все еще существует:
docker pull php:7.2-fpm-alpine3.11
(который работает). Я выбрал эту дату и версию случайным образом, поищите, если вам нужны конкретные версии.3. Эй, вы нашли какой-нибудь обходной путь для файла phpearth.rsa.pub?
4. В итоге я использовал не альпийский образ php-fpm. Но я попробовал этот альпийский подход. Я не мог заставить это работать так, как пытался а. Хотя ответ @Don’Tpanic был очень точным. Используя предложенное им изображение, я смог использовать https в php. Я все еще не знаю, почему это происходило, но его/ее ответ заставил это сработать.