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

时间:2020-01-22 20:44:07

标签: php docker docker-compose dockerfile

我想安装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

我的"ext-http": "*"的{​​{1}}节点中有require

我尝试过:

运行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

可能的扩展名值:bcmath bz2日历ctype curl dba dom 附魔exif ffi文件信息过滤器ftp gd gettext gmp哈希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国际XML SOAP ext-http'返回的非零代码:1未能部署'Compose: .docker':composer.json进程以退出代码1完成

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

2 个答案:

答案 0 :(得分:0)

您可能想通过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那里得到了灵感

答案 1 :(得分:0)

我发布了一个脚本,使您可以通过以下几行安装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