Добавить расширение yaml в php при использовании официального образа Alpine Docker

Я использую этот официальный образ php Docker: https://github.com/docker-library/php/blob/76a1c5ca161f1ed6aafb2c2d26f83ec17360bc68/7.1/alpine/Dockerfile

Теперь мне нужно добавить поддержку расширения yaml, которое не связано с php. Я вижу, что базовое изображение, которое я использую, использует phpize.

Я пытаюсь с этим подходом:

FROM php:7.1.5-alpine

# Install and enable yaml extension support to php
RUN apk add --update yaml yaml-dev
RUN pecl channel-update pecl.php.net  
RUN pecl install yaml-2.0.0 && docker-php-ext-enable yaml

Но я получаю это ошибки:

running: phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

ERROR: `phpize' failed
ERROR: Service 'php_env' failed to build: The command '/bin/sh -c pecl  install yaml-2.0.0 && docker-php-ext-enable yaml' returned a non-zero code: 1

Какой самый докучный способ докера использовать этот образ и добавить эту поддержку?

Должен ли я использовать его в качестве базы, или как-то возможно добавить параметры, чтобы сделать желаемое расширение настраиваемым?

1 ответ

Решение

Alpine использует apk для установки пакетов. Процесс компиляции жалуется на отсутствие autoconf, который встречается в Alpine's autoconf пакет.

Я бы посоветовал вам запустить эти команды:

RUN apk add --no-cache --virtual .build-deps \
    g++ make autoconf yaml-dev

RUN pecl channel-update pecl.php.net
RUN pecl install yaml-2.0.0 && docker-php-ext-enable yaml

RUN apk del --purge .build-deps

Если вам нужно установить другие библиотеки не-dev, вы можете установить их в отдельном apk add команда. Эта процедура будет:

  1. установить сборку deps, используя --no-cache означает, что вы используете обновленный индекс и не кэшированы локально (поэтому нет необходимости --update или сохранить пкг в кеш). --virtual означает, что вы создаете виртуальную ссылку для всех тех пакетов, которые впоследствии могут быть удалены (потому что они бесполезны после процесса компиляции)

  2. делай свои вещи с помощью pecl и docker-php-ext-enable

  3. удалить предыдущие сборки

Если вы по-прежнему сталкиваетесь с отсутствующей зависимостью, вы можете увидеть в качестве ссылки следующее: https://pkgs.alpinelinux.org/packages

Последняя версия, по крайней мере, начиная с 2.0.4, требует, чтобы yaml-dev был установлен для работы. Так что переместите это в пакеты, которые хотите сохранить в образе. Кроме того, в alpine 3.11 в сочетании с репозиторием php-alpine у ​​меня возникла проблема, заключающаяся в том, что он хочет, чтобы вы добавили местоположение вашего файла php.ini.

просто добавьте следующее: RUN pear config-set php_ini /etc/php7/php.ini

где вы при необходимости меняете путь на путь к местоположению вашего php.ini.

Другие вопросы по тегам