【问题标题】:Docker image build with PHP zip extension shows "bundled libzip is deprecated" warning使用 PHP zip 扩展构建的 Docker 映像显示“捆绑的 libzip 已弃用”警告
【发布时间】:2018-02-09 07:09:12
【问题描述】:

我有一个Dockerfile,它的构建命令如下:

#install some base extensions
RUN apt-get install -y \
        zlib1g-dev \
        zip \
  && docker-php-ext-install zip

我从构建输出中收到此警告:

警告:不推荐使用捆绑的 libzip,并将被删除。
配置:警告:加密和 bzip2 等某些功能不可用。
配置:警告:使用系统库和 --with-libzip 是 推荐。

在没有这些警告的情况下安装 zip 扩展的正确方法是什么?

我的完整 Dockerfile 看起来像:

FROM php:7.2-apache

RUN apt-get clean
RUN apt-get update

#install some basic tools
RUN apt-get install -y \
        git \
        tree \
        vim \
        wget \
        subversion

#install some base extensions
RUN apt-get install -y \
        zlib1g-dev \
        zip \
  && docker-php-ext-install zip

#setup composer
RUN curl -sS https://getcomposer.org/installer | php \
        && mv composer.phar /usr/local/bin/ \
        && ln -s /usr/local/bin/composer.phar /usr/local/bin/composer


WORKDIR /var/www/

【问题讨论】:

  • 试试apt-get install php7.0-zip
  • @Vladimir 它的 docker 我认为他们建议使用 docker-php-ext-install hub.docker.com/_/php

标签: php docker php-extension libzip


【解决方案1】:

looks like PHP 不再捆绑 libzip。你需要install it。您安装zlib1g-dev,但安装libzip-dev。这会将zlib1g-dev 作为依赖项安装,并允许configure 脚本检测到libzip 已安装。

对于 PHP

docker-php-ext-configure zip --with-libzip

在执行安装之前

docker-php-ext-install zip

如最后的警告所示。

简而言之:将 Dockerfile 的相关部分更改为

适用于 PHP

#install some base extensions
RUN apt-get install -y \
        libzip-dev \
        zip \
  && docker-php-ext-configure zip --with-libzip \
  && docker-php-ext-install zip

对于 PHP >= 7.3

#install some base extensions
RUN apt-get install -y \
        libzip-dev \
        zip \
  && docker-php-ext-install zip

我已经验证了它可以按预期构建。

 


 

如果您不使用 Docker PHP base image,事情可能会容易得多。例如,对于 Alpine,以下 Dockerfile 将为您提供安装了 zip 扩展的 PHP 7。

FROM alpine:latest

RUN apk update && apk upgrade
RUN apk add php7 php7-zip composer

【讨论】:

  • 谢谢,它解决了我从 7.1 升级的问题
  • 谢谢!很明显。当您从 7.3 迁移到 7.4 时,您必须删除 docker-php-ext-configure zip --with-libzip
【解决方案2】:

如果您使用的是 7.4,这对我有用:

FROM php:7.4-fpm-alpine

RUN apk add --no-cache zip libzip-dev
RUN docker-php-ext-configure zip
RUN docker-php-ext-install zip
RUN docker-php-ext-install pdo pdo_mysql 

【讨论】:

    【解决方案3】:

    我使用php:7.2-fpm-alpine在 Docker 上构建了一个 PHP 容器

    FROM php:7.2-fpm-alpine
    
    WORKDIR /var/www
    
    RUN apk add --no-cache zip libzip-dev
    RUN docker-php-ext-configure zip --with-libzip
    RUN docker-php-ext-install zip
    RUN docker-php-ext-install pdo pdo_mysql 
    

    【讨论】:

    • 您可能想说为什么这与 OP 的配方不同/更好,以及为什么您将 zip 作为额外的 docker-php-ext-install 安装(这会创建一个额外的层)。跨度>
    • 这个例子对我帮助很大,因为我也在使用 alpine 作为我的容器。谢谢! @GregBell 我同意运行多个 RUN 命令似乎效率较低。
    【解决方案4】:

    显然,zip 扩展在运行时需要libzip-dev 包(不仅仅是构建时)。我最初将apk add libzip-devgcc make postgresql-dev 一起添加到我安装的虚拟包中,后来我将其删除以保持图像较小。

    这行得通:

    RUN apk add openjdk11-jre-headless libzip-dev \ # libzip-dev not part of virtual package
      && apk add --no-cache --virtual \
         .build-deps autoconf g++ make postgresql-dev  \
      && docker-php-ext-configure zip \
      && docker-php-ext-install zip \
      && docker-php-ext-install pdo_pgsql bcmath \
      && pecl install redis-5.3.1 \
      && pecl install xdebug-beta \
      && docker-php-ext-enable redis opcache xdebug \
      && apk add libpq ca-certificates curl \
      && apk del .build-deps  \
      && rm -rf /tmp/* \
      && rm -rf /var/cache/apk/*
    

    行不通

    RUN apk add openjdk11-jre-headless \
      && apk add --no-cache --virtual \
         .build-deps autoconf g++ make postgresql-dev libzip-dev \ # libzip-dev part of virtual package
      && docker-php-ext-configure zip \
      && docker-php-ext-install zip \
      && docker-php-ext-install pdo_pgsql bcmath \
      && pecl install redis-5.3.1 \
      && pecl install xdebug-beta \
      && docker-php-ext-enable redis opcache xdebug \
      && apk add libpq ca-certificates curl \
      && apk del .build-deps  \
      && rm -rf /tmp/* \
      && rm -rf /var/cache/apk/*
    

    【讨论】:

    • 我正在使用 php7.4-fpm-alpine,这是唯一对我有用的东西。不错的收获!
    • 安装libziplibzip-dev 然后卸载libzip-dev 也可以
    • @ahmadalishafiee 我去年测试时的结论是,在构建 lipzip 后卸载 libzip-dev 会破坏库
    • 我可以确认,libzip-dev 在运行时是必需的。
    【解决方案5】:

    为了构建一个 php/apache 容器,你只需要首先安装 libzip-dev 库。至少使用 docker 镜像 php:7.3-apache

    FROM php:7.3-apache
    MAINTAINER XXX
    
    RUN apt-get update
    RUN apt-get install -y libzip-dev
    RUN docker-php-ext-install zip
    

    希望对你有帮助

    【讨论】:

      【解决方案6】:

      这对我有用:

      RUN docker-php-ext-configure zip --with-libzip
      

      【讨论】:

        猜你喜欢
        • 2017-09-12
        • 2021-01-09
        • 2015-05-01
        • 2016-04-20
        • 1970-01-01
        • 2020-07-18
        • 2015-04-26
        • 1970-01-01
        相关资源
        最近更新 更多