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

Posted

技术标签:

【中文标题】Docker:如何安装 PHP 7.4 扩展 ext-http?【英文标题】:Docker: How to install PHP 7.4 extension ext-http? 【发布时间】:2020-05-09 02:22:38 【问题描述】:

我想安装 ext-http 扩展,因为在我的 php-apache 容器中执行 composer install 命令时出现此错误:

您的系统中缺少请求的 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": "*"

我试过了:

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

我有这个错误:

步骤 7/10:运行 docker-php-ext-install -j$(nproc) opcache pdo_mysql intl xml soap ext-http ---> 在 8ef2c127b632 错误中运行: /usr/src/php/ext/ext-http 不存在

用法:/usr/local/bin/docker-php-ext-install [-jN] ext-name [ext-name ...] 即:/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

如果需要自定义 ./configure 参数,请参阅 docker-php-ext-configure

ext-name 的可能值:bcmath bz2 calendar ctype curl dba dom 附魔 exif ffi 文件信息过滤器 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 反射会话 shmop simplexml snmp 肥皂插座 钠 spl 标准 sysvmsg sysvsem sysvshm 整洁 标记器 xml xmlreader xmlrpc xmlwriter xsl zend_test zip

上面的一些模块已经编译成PHP了;请检查 “php -i”的输出以查看已加载的模块。错误: 服务 'apache' 未能构建:命令 '/bin/sh -c docker-php-ext-install -j$(nproc) opcache pdo_mysql intl xml soap ext-http' 返回了一个非零代码:1 无法部署 'Compose: .docker': docker-compose 进程以退出代码 1 结束

请问如何安装此扩展程序?

【问题讨论】:

运行 docker-php-ext-install ext-http ***.com/a/62540075/12910765 【参考方案1】:

您可能希望通过 pecl 安装它。 http 扩展也有dependencies。

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

【讨论】:

我要添加一个注释,在这里安装哈希扩展可能不需要,因为它默认安装在 PHP 映像中,或者如果安装哈希扩展导致错误,请尝试跳过该步骤并继续。【参考方案2】:

我发布了一个脚本,让您只需以下几行即可安装 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

【讨论】:

以上是关于Docker:如何安装 PHP 7.4 扩展 ext-http?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用官方 PHP Docker 镜像方法安装 php-redis 扩展?

Docker PHP 安装扩展汇总

Ubuntu 20.04、PHP 7.4:mbstring 已安装但未启用

dockerphp-cli如何使用

如何在 php 7.4 上安装 ziparchive?

docker实战centos 7.4 安装docker