La compilación de la imagen de Docker con la extensión zip de PHP muestra la advertencia “libzip incluido está en desuso”

5 minutos de lectura

avatar de usuario
sakhunzai

tengo un Dockerfile con un comando de compilación como este:

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

Recibo esta advertencia de la salida de compilación:

ADVERTENCIA: El uso de libzip incluido está en desuso y se eliminará.
configure: ADVERTENCIA: Algunas características como el cifrado y bzip2 no están disponibles.
configure: ADVERTENCIA: Se recomienda usar la biblioteca del sistema y –with-libzip.

¿Cuál es la forma correcta de instalar la extensión zip sin estas advertencias?

Mi Dockerfile completo se ve así:

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/

  • probar apt-get install php7.0-zip

    – Vladímir

    9 de febrero de 2018 a las 7:12


  • @Vladimir es docker, creo que sugieren usar docker-php-ext-install hub.docker.com/_/php

    – sakhunzai

    9 de febrero de 2018 a las 7:18

avatar de usuario
solo un estudiante

Eso parece PHP ya no incluye paquetes libzip. Necesitas instalarlo. tu instalas zlib1g-devpero en lugar de instalar libzip-dev. Esto instala zlib1g-dev como una dependencia y permite la configure script para detectar eso libzip esta instalado.

Para PHP

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

antes de realizar la instalación con

docker-php-ext-install zip

como indica la última advertencia.

En resumen: cambie la parte relevante de su Dockerfile a

Para 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

Para PHP >= 7.3

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

He verificado que esto se construye como se esperaba.


En caso de que no esté utilizando el Docker Imagen básica de PHP, las cosas pueden ser mucho más fáciles. Por ejemplo, para Alpine, el siguiente Dockerfile le proporcionará PHP 7 con la extensión zip instalada.

FROM alpine:latest

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

  • gracias, resolvió un problema que tenía al actualizar desde 7.1

    – brad

    17 de marzo de 2021 a las 12:41

  • ¡Gracias! Está despejado. Cuando pasa de 7.3 a 7.4, debe eliminar docker-php-ext-configure zip --with-libzip

    – Jugador 1

    27 de julio de 2021 a las 20:09

En caso de que esté usando 7.4, esto funcionó para mí:

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 

  • Esto funcionó para mí usando 7.4.

    – Usama Munir

    20 de junio a las 12:57

avatar de usuario
Bernard Tai

Construí un contenedor PHP en Docker usando php:7.2-fpm-alpine

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 

  • Es posible que desee decir por qué eso es diferente/mejor que la receta de OP, y también por qué está instalando zip como un docker-php-ext-install adicional (que crea una capa adicional).

    –Greg Bell

    4 de diciembre de 2019 a las 20:01

  • Este ejemplo me ayudó mucho, ya que también estoy usando alpine para mi contenedor. ¡Gracias! @GregBell Estoy de acuerdo en que ejecutar varios comandos EJECUTAR parece menos eficiente.

    – Rizky Fakkel

    17 de diciembre de 2019 a las 12:45

Para construir un contenedor de php/Apache solo tienes que instalar primero libzip-dev biblioteca. Al menos usando la imagen acoplable 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

Espero eso ayude

avatar de usuario
charlie

Aparentemente, la extensión zip necesita el libzip-dev paquete en tiempo de ejecución (no solo en tiempo de compilación). Originalmente agregué el apk add libzip-dev a un paquete virtual que instalé junto con gcc make postgresql-dev que luego eliminé para mantener la imagen pequeña.

Esto funciona:

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/*

Esto hace no trabajar:

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/*

  • Estoy usando php7.4-fpm-alpine y esto es lo único que funcionó para mí. ¡Buena atrapada!

    – Nathan

    11 de diciembre de 2020 a las 22:01

  • instalando libzip junto a libzip-dev luego desinstalar libzip-dev también funcionaría

    – ahmadali shafiee

    6 de febrero de 2021 a las 12:17


  • @ahmadalishafiee mi conclusión cuando probé esto el año pasado fue que desinstalar libzip-dev después de construir lipzip rompió la biblioteca

    – charlie

    6 de febrero de 2021 a las 20:53


  • Puedo confirmar, libzip-dev se requiere en tiempo de ejecución.

    – nmfzone

    6 sep 2021 a las 16:28

avatar de usuario
dijo

Creé un dockerfile de PHP usando php:7.4-fpm-alpine

FROM php:7.4-fpm-alpine
    
    # Apk install
    RUN apk --no-cache update && apk --no-cache add bash git
    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
    
    # Install composer
    RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php && php -r "unlink('composer-setup.php');" && mv composer.phar /usr/local/bin/composer
    
    # Symfony CLI
    RUN wget https://get.symfony.com/cli/installer -O - | bash && mv /root/.symfony/bin/symfony /usr/local/bin/symfony
    
    WORKDIR /var/www/html

  • Estoy usando php7.4-fpm-alpine y esto es lo único que funcionó para mí. ¡Buena atrapada!

    – Nathan

    11 de diciembre de 2020 a las 22:01

  • instalando libzip junto a libzip-dev luego desinstalar libzip-dev también funcionaría

    – ahmadali shafiee

    6 de febrero de 2021 a las 12:17


  • @ahmadalishafiee mi conclusión cuando probé esto el año pasado fue que desinstalar libzip-dev después de construir lipzip rompió la biblioteca

    – charlie

    6 de febrero de 2021 a las 20:53


  • Puedo confirmar, libzip-dev se requiere en tiempo de ejecución.

    – nmfzone

    6 sep 2021 a las 16:28

avatar de usuario
Diego Santa Cruz Mendezú

esto funcionó para mí:

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

¿Ha sido útil esta solución?