在使用官方 Alpine Docker 图像时向 php 添加 yaml 扩展
add yaml extension to php on using official Alpine Docker image
我正在使用官方 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
使用该图像并添加该支持的最惯用的docker方式是什么?
我应该将它用作基础,还是可以通过某种方式添加参数以使所需的扩展可配置?
Alpine 使用apk 安装包。编译过程抱怨缺少 autoconf
,它在 Alpine 的 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
如果您需要安装其他非开发库,您可以在单独的 apk add
命令中安装它们。此过程将:
安装 build deps,使用 --no-cache
意味着您正在使用更新的索引而不是本地缓存(因此不需要 --update
或将 pkg 保存在缓存)。 --virtual
意味着你正在为所有那些以后可以删除的包创建一个虚拟引用(因为它们在编译过程后就没用了)
用 pecl 和 docker-php-ext-enable
做你的事情
删除之前的build deps
如果你仍然遇到任何缺失的依赖,你可以参考这个:https://pkgs.alpinelinux.org/packages
最新版本,至少从 2.0.4 开始,需要安装 yaml-dev 才能 运行。因此,将其移动到您想要保留在映像中的包中。此外,在结合 php-alpine 存储库的 alpine 3.11 上,我遇到了一个问题,它希望您添加 php.ini 文件的位置。
只需添加以下内容:运行 pear config-set php_ini /etc/php7/php.ini
如果需要,您可以将路径更改为 php.ini 所在位置的路径。
我正在使用官方 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
使用该图像并添加该支持的最惯用的docker方式是什么?
我应该将它用作基础,还是可以通过某种方式添加参数以使所需的扩展可配置?
Alpine 使用apk 安装包。编译过程抱怨缺少 autoconf
,它在 Alpine 的 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
如果您需要安装其他非开发库,您可以在单独的 apk add
命令中安装它们。此过程将:
安装 build deps,使用
--no-cache
意味着您正在使用更新的索引而不是本地缓存(因此不需要--update
或将 pkg 保存在缓存)。--virtual
意味着你正在为所有那些以后可以删除的包创建一个虚拟引用(因为它们在编译过程后就没用了)用 pecl 和 docker-php-ext-enable
做你的事情
删除之前的build deps
如果你仍然遇到任何缺失的依赖,你可以参考这个:https://pkgs.alpinelinux.org/packages
最新版本,至少从 2.0.4 开始,需要安装 yaml-dev 才能 运行。因此,将其移动到您想要保留在映像中的包中。此外,在结合 php-alpine 存储库的 alpine 3.11 上,我遇到了一个问题,它希望您添加 php.ini 文件的位置。
只需添加以下内容:运行 pear config-set php_ini /etc/php7/php.ini
如果需要,您可以将路径更改为 php.ini 所在位置的路径。