Docker:如何安装PHP 7.4扩展ext-http?

7
我想安装 ext-http 扩展程序,因为在执行 composer install 命令时在我的 php-apache 容器中遇到了此错误:

您的系统缺少所需的 PHP 扩展 ext-http *。 请安装或启用 PHP 的 http 扩展。

我的 Dockerfile:

ARG PHP_VERSION=""

FROM php:${PHP_VERSION}-apache

ENV COMPOSER_ALLOW_SUPERUSER=1

EXPOSE 80
WORKDIR /${PROJECT_DIRECTORY}

# git, unzip & zip are for composer
RUN apt-get update -qq && \
    apt-get install -qy \
    git \
    gnupg \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libmcrypt-dev \
    libicu-dev \
    libxml2-dev \
    wget \
    nano \
    unzip \
    zip && \
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
    apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# PHP Extensions
RUN docker-php-ext-install -j$(nproc) opcache pdo_mysql intl xml soap
ADD php/php.ini /usr/local/etc/php/conf.d/${PROJECT_DIRECTORY}.ini

# Apache
RUN a2enmod rewrite remoteip
ADD vhosts/vhost.conf /etc/apache2/sites-available/000-default.conf

我在composer.jsonrequire节点中有"ext-http": "*"

我尝试了:

RUN docker-php-ext-install -j$(nproc) opcache pdo_mysql intl xml soap ext-http

但是我遇到了此错误:

Step 7/10 : RUN docker-php-ext-install -j$(nproc) opcache pdo_mysql intl xml soap ext-http ---> Running in 8ef2c127b632 error: /usr/src/php/ext/ext-http does not exist

usage: /usr/local/bin/docker-php-ext-install [-jN] ext-name [ext-name ...] ie: /usr/local/bin/docker-php-ext-install gd mysqli /usr/local/bin/docker-php-ext-install pdo pdo_mysql /usr/local/bin/docker-php-ext-install -j5 gd mbstring mysqli pdo pdo_mysql shmop

if custom ./configure arguments are necessary, see docker-php-ext-configure

Possible values for ext-name: 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 xmlrpc xmlwriter xsl zend_test zip

以上一些模块已经编译进了PHP,请运行“php -i”查看哪些模块已经加载。 ERROR: Service 'apache' failed to build: The command '/bin/sh -c docker-php-ext-install -j$(nproc) opcache pdo_mysql intl xml soap ext-http' returned a non-zero code: 1 Failed to deploy 'Compose: .docker': docker-compose process finished with exit code 1

请问我如何安装这个扩展?


运行 docker-php-ext-install ext-http。 - Tom Shaw
https://dev59.com/zrTma4cB1Zd3GeqP4lEs#62540075 - Rana Nadeem
2个回答

11

我发布了一个脚本,让您可以只用这些代码安装http PHP扩展(以及许多其他扩展):

ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/

RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
    install-php-extensions http

该脚本负责处理PHP版本,并安装所有所需的APT(适用于Debian)或APK(适用于Alpine)包。

更多详细信息请参见:https://github.com/mlocati/docker-php-extension-installer


3

你可能希望通过pecl安装它。http扩展还有依赖项

RUN  docker-php-ext-install hash iconv \
&& pecl install raphf propro \
&& docker-php-ext-enable raphf propro \
&& pecl install pecl_http \
&& echo -e "extension=raphf.so\nextension=propro.so\nextension=http.so" > /usr/local/etc/php/conf.d/docker-php-ext-http.ini \
&& rm -rf /usr/local/etc/php/conf.d/docker-php-ext-raphf.ini \
&& rm -rf /usr/local/etc/php/conf.d/docker-php-ext-propro.ini 

我受到了这个链接的启发:https://hub.docker.com/r/realpaul/docker-php/dockerfile


2
我想在这里添加一条注释,安装哈希扩展可能是不必要的,因为它已经默认安装在 PHP 镜像中了。如果安装哈希扩展导致错误,请尝试跳过该步骤并继续进行。 - Manish M Demblani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接