61

我有一个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/
4

6 回答 6

202

看起来PHP 不再捆绑libzip。你需要安装它。您安装zlib1g-dev,而是安装libzip-dev。这zlib1g-dev作为依赖项安装,并允许configure脚本检测libzip已安装。

对于 PHP < 7.3,您需要

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

在执行安装之前

docker-php-ext-install zip

正如最后一个警告所示。

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

对于 PHP < 7.3

#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 基础映像,事情可能会容易得多。例如,对于 Alpine,以下 Dockerfile 将为您提供安装了 zip 扩展的 PHP 7。

FROM alpine:latest

RUN apk update && apk upgrade
RUN apk add php7 php7-zip composer
于 2018-02-09T07:32:08.683 回答
12

如果您使用的是 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 
于 2020-05-18T19:02:17.917 回答
7

我使用 Docker 在 Docker 上构建了一个 PHP 容器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 
于 2019-10-31T05:31:57.620 回答
5

显然 zip 扩展libzip-dev在运行时需要包(不仅仅是构建时)。我最初将它添加apk add libzip-dev到我安装的虚拟包中gcc 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/*
于 2020-08-24T02:07:44.763 回答
3

为了构建一个 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

希望能帮助到你

于 2020-02-18T13:54:00.120 回答
-1

这对我有用:

RUN docker-php-ext-configure zip --with-libzip
于 2020-07-27T06:14:45.007 回答