Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正式的Alpine Docker图像向php添加yaml扩展_Php_Docker_Dockerfile_Alpine_Phpize - Fatal编程技术网

使用正式的Alpine Docker图像向php添加yaml扩展

使用正式的Alpine Docker图像向php添加yaml扩展,php,docker,dockerfile,alpine,phpize,Php,Docker,Dockerfile,Alpine,Phpize,我正在使用这个官方php Docker图像: 现在,我需要添加对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 inst

我正在使用这个官方php Docker图像:

现在,我需要添加对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
命令中安装它们。该程序将:

  • 使用
    --no cache
    安装build deps意味着您正在使用更新的索引,而不是本地缓存(因此不需要
    --update
    或将pkg保存在缓存中)
    --virtual
    表示您正在为以后可以删除的所有包创建一个虚拟引用(因为在编译过程之后这些包是无用的)

  • 使用pecl和docker php ext enable完成您的工作

  • 删除以前的生成dep


  • 如果您仍然遇到任何缺少的依赖项,您可以将其作为参考:

    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
    命令中安装它们。该程序将:

  • 使用
    --no cache
    安装build deps意味着您正在使用更新的索引,而不是本地缓存(因此不需要
    --update
    或将pkg保存在缓存中)
    --virtual
    表示您正在为以后可以删除的所有包创建一个虚拟引用(因为在编译过程之后这些包是无用的)

  • 使用pecl和docker php ext enable完成您的工作

  • 删除以前的生成dep


  • 如果仍然遇到任何缺少的依赖项,您可以将其作为参考:

    最新版本(至少自2.0.4以来)要求安装yaml dev才能运行。因此,将其移动到要保留在图像中的包。另外,在alpine 3.11上,结合php alpine repository,我遇到了一个问题,它希望您添加php.ini文件的位置

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


    如果需要,可以将路径更改为php.ini位置的路径。

    最新版本(至少自2.0.4以来)要求安装yaml dev才能运行。因此,将其移动到要保留在图像中的包。另外,在alpine 3.11上,结合php alpine repository,我遇到了一个问题,它希望您添加php.ini文件的位置

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


    如果需要,您可以将路径更改为php.ini位置的路径。

    要获得
    pecl
    ,读者还需要执行
    apk add php7 dev
    。这对我不起作用。我做了一个phpinfo(),在“Additional.ini files parsed”字段中有值“/usr/local/etc/php/conf.d/docker php ext yaml.ini”,但扩展名似乎没有启用。当我尝试php文档中的一个示例时,会收到以下错误消息:“调用未定义的函数yaml_emit()”。有什么想法吗?好吧,我觉得很愚蠢,但我真的很想和大家分享。我删除了我的图像并重新构建,现在它工作了。只是重新构建您的图像而不删除它之前可能是问题的根源。事实上,当您再次构建同一个映像时,它会使用旧的构建来创建新的映像。我是docker的新手,我没想到会这样工作,很高兴知道。因此,感谢您的解决方案,它现在工作得非常好!只是我忘了还有一件事,你应该在你的答案中加上。如果yaml.so文件不可执行,则它将不起作用。我不得不在我的run命令中添加这一行:chmod+x$(php config--extension dir)/yaml。因此我希望它会有所帮助
    apk del--purge.build deps
    为我提供了更多信息,因为它正在删除libyaml。我添加了一个
    apk add--no cache yaml
    来将yaml添加到虚拟包之外,以使它对我起作用。要获取
    pecl
    ,读者还需要执行
    apk add php7 dev
    。它对我不起作用。我做了一个phpinfo(),在“Additional.ini files parsed”字段中有值“/usr/local/etc/php/conf.d/docker php ext yaml.ini”,但扩展名似乎没有启用。当我尝试php文档中的一个示例时,会收到以下错误消息:“调用未定义的函数yaml_emit()”。有什么想法吗?好吧,我觉得很愚蠢,但我真的很想和大家分享。我删除了我的图像并重新构建,现在它工作了。只是重新构建您的图像而不删除它之前可能是问题的根源。事实上,当您再次构建同一个映像时,它会使用旧的构建来创建新的映像。我是docker的新手,我没想到会这样工作,很高兴知道。因此,感谢您的解决方案,它现在工作得非常好!只是我忘了还有一件事,你应该在你的答案中加上。如果yaml.so文件不可执行,则它将不起作用。我不得不在我的run命令中添加这一行:chmod+x$(php config--extension dir)/yaml。因此我希望它会有所帮助
    apk del--purge.build deps
    为我提供了更多信息,因为它正在删除libyaml。我添加了一个
    apkadd--no cache yaml
    ,以将yaml添加到虚拟包之外,使其适合我