使用官方Alpine Docker图像

时间:2017-05-21 13:09:51

标签: php docker dockerfile alpine phpize

我正在使用这个官方的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方式是什么?

我应该使用它作为基础,还是可以添加参数以使所需的扩展可配置?

2 个答案:

答案 0 :(得分:3)

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命令中。这个程序将:

  1. 安装构建代表,使用--no-cache意味着您使用更新的索引而不是本地缓存(因此不需要--update或将pkg保存在缓存中) 。 --virtual表示您正在为以后可以删除的所有软件包创建虚拟参考(因为它们在编译过程后无用)

  2. 用pecl和docker-php-ext-enable

  3. 做你的东西
  4. 删除以前的构建代码

  5. 如果您仍然遇到任何遗漏的依赖项,您可以参考:https://pkgs.alpinelinux.org/packages

答案 1 :(得分:0)

最新版本(至少从2.0.4开始)要求安装yaml-dev才能运行。因此,将其移动到要保留在映像中的包中。另外,在结合了php-alpine仓库的alpine 3.11上,我遇到了问题,它要求您添加php.ini文件的位置。

只需添加以下内容:运行pear config-set php_ini /etc/php7/php.ini

根据需要将路径更改为php.ini位置的路径。