在Docker容器中启用PHP的SOAP功能

30

我无法让SOAP与我的PHP Docker设置配合工作。

我正在使用Docker CE for Windows Version 18.03.1-ce-win65 (17513)。PHP版本为7.2.3。

我尝试在容器内运行apt-get install php-soap,结果为 Reading package lists... Done
Building dependency tree
Reading state information... Done
* Package php-soap is a virtual package provided by: * php7.0-soap 7.0.27-0+deb9u1 [Not candidate version]*

E: Package 'php-soap' has no installation candidate

运行docker-php-ext-install soap会导致错误配置:错误:找不到libxml2,请检查您的libxml2安装。

但是,在查看PHP信息时,我看到以下内容: libxml2 Version => 2.9.4


每当您进行配置并出现此类错误时,您需要安装“-dev”软件包。 - Farkie
4个回答

68

作为 Dockerfile 的一部分,您需要安装 libxml2-dev。由于这个镜像被保持在最小状态,因此并没有包括每个模块所需的所有组件。虽然镜像可能已经安装了主要包,但 -dev 包含编译依赖它的其他模块所需的组件...

RUN apt-get update && \
    apt-get install -y libxml2-dev

(来自https://github.com/docker-library/php/issues/315)

仅为了明确 - 命令

RUN docker-php-ext-install soap

然后将成功运行以安装soap库。


谢谢。但这只能作为docker build的一部分工作吗?我已经在容器中运行过了,phpinfo显示它已经安装好了。 - SpaghettiCodee
您应该能够登录到容器并运行apt-get install命令。此安装将添加-dev软件包,该软件包与PHP可执行文件本身使用的软件包不同。 - Nigel Ren
2
从未尝试在容器中运行 docker-php-ext-install soap,所以如果可以运行,我会很感兴趣。 - Nigel Ren
1
对于基于alpine的容器,第一个命令应该是:apk update && apk add libxml2-dev - Hamid Rouhani

27

对于我而言,在使用PHP 7.3.2时,其他解决方案并没有奏效。

无论是"php-soap"还是"php7.3-soap"都会出现"phpXXX-soap没有可安装的候选项"错误。

只有"docker-php-ext-install soap"需要"libxml2-dev",所以我只安装了必要的组件:

FROM php:7.3
RUN apt-get update -y \
  && apt-get install -y \
     libxml2-dev \
  && apt-get clean -y \
  && docker-php-ext-install soap  

...然后它很好地工作了。


当我使用 FROM php:7.3-apache-stretch 时,出现错误 ERROR: Module soap does not exist! - Novocaine

6

答案是正确的,但是对于我来说,我还需要启用(docker-php-ext-enable soap) soap模块。因此,如果有人觉得有用:

FROM php:7.4.24-apache

# your configurations ...

RUN apt-get update && \
    apt-get install -y libxml2-dev
RUN docker-php-ext-install soap && docker-php-ext-enable soap

# other configurations ...

-1

这超出了此存储库的范围。

您应该通过以下方法获取它:

RUN apt-get update -y \
  && apt-get install -y \
     libxml2-dev \
     php-soap \
  && apt-get clean -y \
  && docker-php-ext-install soap    

1
在这种情况下,“php-soap”会返回一个错误,因为在php7.2中没有这样的软件包。 - Sergey Fedirko

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