добавить расширение 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

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

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

0

Решение

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

3

Другие решения

Других решений пока нет …