在 Dockerfile 上安装 php 扩展

问题描述 投票:0回答:2

我正在尝试为我的应用程序创建我的 php docker 镜像,但是当我开始构建它时,由于显示此错误而无法安装一些扩展

#0 6.705 (25/26) Installing make (4.3-r0)
#0 6.726 (26/26) Installing re2c (2.1.1-r0)
#0 6.764 Executing busybox-1.34.1-r5.trigger
#0 6.770 OK: 255 MiB in 59 packages
#0 8.461 error: /usr/src/php/ext/libzip does not exist
#0 8.461 
#0 8.461 usage: /usr/local/bin/docker-php-ext-install [-jN] [--ini-name file.ini] ext-name [ext-name ...]
#0 8.461    ie: /usr/local/bin/docker-php-ext-install gd mysqli
#0 8.461        /usr/local/bin/docker-php-ext-install pdo pdo_mysql
#0 8.461        /usr/local/bin/docker-php-ext-install -j5 gd mbstring mysqli pdo pdo_mysql shmop
#0 8.461 
#0 8.461 if custom ./configure arguments are necessary, see docker-php-ext-configure
#0 8.461 
#0 8.461 Possible values for ext-name:
#0 8.496 bcmath bz2 calendar ctype curl dba dom enchant exif ffi fileinfo filter ftp gd gettext gmp hash iconv imap intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlwriter xsl zend_test zip
#0 8.496 
#0 8.496 Some of the above modules are already compiled into PHP; please check
#0 8.496 the output of "php -i" to see which modules are already loaded.
------
failed to solve: executor failed running [/bin/sh -c apk update && apk add --no-cache --update linux-headers ${PHPIZE_DEPS}     && docker-php-ext-install     exif     mysqli     pdo     pdo_mysql     libzip     freetype    libfreetype6-dev     libjpeg62-turbo-dev     libpng-dev     && docker-php-ext-configure gd --with-freetype --with-jpeg     && docker-php-ext-install -j$(nproc) gd     && docker-php-ext-install opcache]: exit code: 1

扩展会抛出相同的错误:我也尝试过的

zip
freetype
libfreetype6-dev
。我该如何解决这些错误?在这些之前是否需要先安装另一个扩展?

参考这是我的 dockerfile

FROM php:8.1-fpm-alpine

# Install native PHP extensions
RUN apk update && apk add --no-cache --update linux-headers ${PHPIZE_DEPS} \
    && docker-php-ext-install \
    exif \
    mysqli \
    pdo \
    pdo_mysql \
    libzip \
    freetype\
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install opcache
php docker dockerfile php-extension
2个回答
1
投票

请尝试以下可能对您有帮助的解决方案。也许“freetype”需要一个“GD”库。所以我们修改了下面的一点点 docker 文件。

我指的是这个链接:Trying to add freetype to php-gd in Docker official image

FROM php:8.1-fpm-alpine

# Install native PHP extensions
RUN apk update && apk add --no-cache --update linux-headers ${PHPIZE_DEPS} \
    && apk add --no-cache libzip-dev freetype-dev libjpeg-turbo-dev libpng-dev \
    && docker-php-ext-install \
    exif \
    mysqli \
    pdo \
    pdo_mysql \
    libzip \
    freetype \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install opcache

希望对您有所帮助。


0
投票

您的解决方案有两个问题:

  1. 库名,好像应该是
    libzip-dev, freetype-dev, libjpeg-turbo-dev, libpng-dev
  2. 这些库必须安装到图像本身中,而不仅仅是作为 PHP 扩展。

所以,最终构建成功的Dockerfile是:

FROM php:8.1-fpm-alpine

# Install native PHP extensions
RUN apk update \
    && apk add --no-cache --update linux-headers ${PHPIZE_DEPS} \
    && apk add libzip-dev \
       freetype-dev \
       libjpeg-turbo-dev \
       libpng-dev \
    && docker-php-ext-install \
       exif \
       mysqli \
       pdo \
       pdo_mysql \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install opcache
© www.soinside.com 2019 - 2024. All rights reserved.