Я использую это официальное изображение 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
Какой самый докучный способ докера использовать этот образ и добавить эту поддержку?
Должен ли я использовать его в качестве базы, или как-то возможно добавить параметры, чтобы сделать желаемое расширение настраиваемым?
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
команда. Эта процедура будет:
установить сборку deps, используя --no-cache
означает, что вы используете обновленный индекс и не кэшированы локально (таким образом, нет необходимости --update
или сохранить пкг в кеш). --virtual
означает, что вы создаете виртуальную ссылку для всех тех пакетов, которые впоследствии могут быть удалены (потому что они бесполезны после процесса компиляции)
делай свои вещи с помощью pecl и docker-php-ext-enable
удалить предыдущие сборки
Если вы все еще сталкиваетесь с отсутствующей зависимостью, вы можете увидеть в качестве ссылки следующее: https://pkgs.alpinelinux.org/packages
Других решений пока нет …