Nuestros sitios web usan WordPress contenido en imágenes de Docker. Pero algunos sitios pueden necesitar extensiones de PHP, como por ejemplo SOAP, para interactuar con servicios web. ¿Cómo los habilitamos en los contenedores que los necesiten?

Enlaces útiles

En el Docker Hub, mencionan que se debe hacer a nivel de la imágen base de PHP. También hay un ejemplo de cómo instalar una extensión de PHP definiendo un Dockerfile propio. Bien, tendremos que compilar una nueva imágen…

Extensiones PHP

Para un plugin de pago on-line, las extensiones que necesitamos son:

  • PHP (>= 5.6)
  • OpenSSL (>= 1.0.1)
  • SimpleXML
  • DOM (>=2.7.8)
  • Soap (el plugin no instala porque no la tengo)

¿Cómo sé cuáles ya tengo?

# php -m
[PHP Modules]
dom
openssl
SimpleXML
...

Parece que la única que me falta es SOAP, aunque tengo que verificar las versiones.

# php -i
phpinfo()
PHP Version => 7.4.11

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.1.1d  10 Sep 2019

SimpleXML support => enabled
Schema support => enabled

DOM/XML => enabled
DOM/XML API Version => 20031129
libxml Version => 2.9.4

O sea que solamente me falta la extensión SOAP. Bien, veamos cómo se agrega.

Extensión de PHP para SOAP

En la página de PHP, sólo dice

Para habilitar el soporte de SOAP, se ha de configurar PHP con –enable-soap.

Significa que el módulo es parte del core de PHP, por ende sólo habría que activarlo con

docker-php-ext-install soap

Compilarlo en Docker

Según esta entrada en Stack Overflow, al menos en las imágenes de PHP, para habilitar el módulo SOAP se necesita además instalar libxml2-dev que trae las librerías necesarias. Como las de WordPress se basan en PHP esto aplicaría también.

Así es que nuestro Dockerfile será:

FROM wordpress:latest

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

Luego lo compilamos así:

docker build -t numericalatina/wordpress:soap .

Y ahora funciona.

Este sitio utiliza cookies.    Leer más
Privacidad