Cómo actualizar wordpress en docker

5 minutos de lectura

avatar de usuario
BigBenny

Estoy ejecutando un contenedor de wordpress php-fpm.

Los archivos fuente de wordpress se montan en un volumen con nombre “wordpress” compartido con el contenedor Nginx.

Todo funciona bien excepto cuando necesito actualizar wordpress a una nueva versión. El código dentro del volumen con nombre persiste. Es normal que un volumen con nombre…

Podría eliminar manualmente el volumen, pero debe haber una mejor manera.

Mi archivo acoplable:

FROM wordpress:4.9.5-php5.6-fpm-alpine

Mi docker-compose.yml

version: '3.1'

services:

  php:
    build: ./docker/php/
    restart: unless-stopped
    volumes:
      - wordpress:/var/www/html
      - ./web/wp-content/:/var/www/html/wp-content/
      - ./web/wp-config.php:/var/www/html/wp-config.php

    environment:
      - DEBUG=${DEBUG:-0}
      - MYSQL_USER=$MYSQL_USER
      - MYSQL_PASSWORD=$MYSQL_PASSWORD
      - MYSQL_DATABASE=$MYSQL_DATABASE

  nginx:
    image: nginx:1-alpine
    restart: unless-stopped
    expose:
      - 80
    volumes:
      - wordpress:/var/www/html
      - ./web/wp-content/:/var/www/html/wp-content/
      - ./docker/nginx/site.conf:/etc/nginx/conf.d/default.conf
      - ./docker/nginx/wordpress.conf:/etc/nginx/wordpress.conf
    environment:
      - VIRTUAL_HOST=localhost

  mysql:
    image: mysql:5.6
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
      - MYSQL_USER=$MYSQL_USER
      - MYSQL_PASSWORD=$MYSQL_PASSWORD
      - MYSQL_DATABASE=$MYSQL_DATABASE
    volumes:
      - mysql:/var/lib/mysql

volumes:
  wordpress: {}
  mysql: {}

networks:
  default:
    external:
      name: wordpress

Espero leer sus sugerencias

Gracias

avatar de usuario
Joseph

Cuando aparece el contenedor de wordpress, comprueba la existencia de archivos en /var/www/html y copias sólo si no está presente. Entonces, en su caso, puede actualizar el entrypoint script para comprobar la versión de wordpress en el wp-includes/version.php en el /var/www/html y los archivos en el contenedor y luego tome la decisión de reemplazar los nuevos archivos.

Editar:

De acuerdo a este solo borrado de index.php o wp-includes/version.php debería copiar los archivos del contenedor nuevamente. O puede actualizar su entrypoint script para copiar archivos a /var/www/html todo el tiempo, pero eso puede causar problemas si elige escalar el wordpress capa.

  • Esto me parece una solución bastante viable con un pequeño ajuste para que se ajuste a su flujo de trabajo.

    – Guillermo Patton

    1 mayo 2018 a las 16:51

  • Pequeña corrección: debe eliminar ambos archivos (index.php y wp-includes/version.php) y luego volver a crear la imagen. Supongo que esto ha cambiado con el tiempo: github.com/docker-library/wordpress/blob/master/php7.1/fpm/…

    – Alex Werz

    24 de mayo de 2019 a las 4:39

Gracias por tu ayuda. Funcionó. Aquí está el código que estoy usando.

Anulé el punto de entrada en dockerfile

COPY check-wordpress-version.sh /usr/local/bin/

ENTRYPOINT ["check-wordpress-version.sh"]

Aquí está el contenido de check-wordpress-version.sh para verificar la versión actual de wordpress.

VOLUME_VERSION="$(php -r 'require('"'"'/var/www/html/wp-includes/version.php'"'"'); echo $wp_version;')"
echo "Volume version : "$VOLUME_VERSION
echo "WordPress version : "$WORDPRESS_VERSION

if [ $VOLUME_VERSION != $WORDPRESS_VERSION ]; then
    echo "Forcing WordPress code update..."
    rm -f /var/www/html/index.php
fi

docker-entrypoint.sh php-fpm

WordPress parece haber abordado esto bajo este problema.

Veo que estás usando una costumbre wp-config.php. Lo más probable es que puedas usar el WORDPRESS_CONFIG_EXTRA para esto en lugar de montar wp-config.php.

Teóricamente (según el enlace anterior), actualizar la imagen debería actualizar la base de datos, pero no lo he confirmado.

En base a esto, mi stack.yml/docker-compose.yml Se ve como esto:

    environment:
      WORDPRESS_CONFIG_EXTRA: |
        define( 'AUTOMATIC_UPDATER_DISABLED', true );
    volumes:
      - "./themes:/var/www/html/wp-content/themes/"
      - "./plugins:/var/www/html/wp-content/plugins/"
      - "./uploads:/var/www/html/wp-content/uploads/"

  • ¿Está utilizando un proxy inverso también (por ejemplo, nginx)? En cuyo caso, ¿qué volúmenes define para el contenedor nginx?

    – lonix

    23 oct 2019 a las 18:52

  • Estoy usando jasonheecs/nginx-proxy. El único volumen que tengo que definir es para los certificados TLS según la documentación de la imagen base (nginxproxy/nginx-proxy).

    –Doug Lampe

    22 de julio de 2021 a las 14:01

Es una solución más fácil.

tienes que editar wp-config.php archivo por agregar define('FS_METHOD','direct'); hasta el final del archivo. Guarde el archivo y ejecute la actualización. A partir de ahora, no necesita un servidor FTP para actualizar su WordPress.

¡Recuerda! Antes de actualizar haz una copia de seguridad 🙂

Para gastar en la respuesta de @ Bigbenny, mi Dockerfile se veía así:

FROM wordpress:latest

WORKDIR /var/www/html

COPY . /var/www/html

COPY check-wordpress-version.sh /usr/local/bin/

RUN chmod 755 /usr/local/bin/check-wordpress-version.sh

ENTRYPOINT ["/usr/local/bin/check-wordpress-version.sh"]

Dos cosas para notar aquí:

  1. tuve que chmod 755 el archivo o obtendría un error de permisos denegados
  2. Coloqué el guión dentro del /usr/local/bin porque por alguna razón cuando solo usaba ENTRYPOINT["check-wordpress-version.sh"]el contenedor no encontraría el archivo.

También modifiqué ligeramente el guión para que se viera así:

#!/bin/sh

VOLUME_VERSION="$(php -r 'require('"'"'/var/www/html/wp-includes/version.php'"'"'); echo $wp_version;')"
echo "Volume version : "$VOLUME_VERSION
echo "WordPress version : "$WORDPRESS_VERSION

if [ $VOLUME_VERSION != $WORDPRESS_VERSION ]; then
    echo "Forcing WordPress code update..."
    rm -f /var/www/html/index.php
    rm -f /var/www/html/wp-includes/version.php
fi

docker-entrypoint.sh apache2-foreground

Para mi caso de uso, tuve que usar apache2-foreground más bien que php-fpm; También eliminé el /var/www/html/wp-includes/version.php expediente.

Finalmente, en mi docker-compose, en lugar de usar el image directiva; solía build: ./wordpress.

¡Espero que esto ayude! 😁

Mi respuesta se aplica al funcionario. imagen de wordpress ventana acoplable. Así que probablemente esté fuera de tema, pero podría ayudar a alguien.

Si estás usando docker-compose puede extraer la imagen más reciente con este comando.

docker pull wordpress

Creo que esto actualizará la imagen de la ventana acoplable central. Cualquier otro proyecto local que Ud. docker-compose up -d con esta configuración de imagen yml ya que usará la última actualización.

  services:
    wordpress:
      image: wordpress:latest

Si actualmente está ejecutando la imagen, necesitará docker-compose down y docker-compose up -d para invocar la actualización.

¿Ha sido útil esta solución?