¿Dónde está mi sitio web Docker WordPress almacenando datos?

5 minutos de lectura

avatar de usuario de kshah
kshah

Actualmente tengo un contenedor de WordPress configurado en Docker y lo tengo vinculado a una base de datos MySQL en la misma máquina (es decir, no en un contenedor Docker). Jugué con la edición del sitio web en mi navegador, eliminando el contenedor de WordPress y creando uno nuevo vinculado a la misma base de datos.

Cuando hice esto, las publicaciones de muestra que hice en mi sitio web persistieron, por lo que asumí que mi base de datos almacenaba mis datos localmente. Sin embargo, luego intenté configurar varios sitios web usando WordPress Multisite usando un contenedor de WordPress. Para hacer esto, tuve que editar el archivo de configuración de WordPress dentro del contenedor de WordPress.

Eliminé este contenedor y creé uno nuevo como antes. Intenté replicar los cambios de configuración en este contenedor, sin embargo, cuando navego a mi sitio web, solo aparece una pantalla en blanco. Esto me lleva a pensar que la base de datos MySQL apunta a tablas vacías de repente.

¿Dónde se almacenan realmente mis plantillas/información de WordPress?

EDITAR: A continuación se muestra el comando que ejecuto

sudo docker run -p 80:80 --name wordpress_local -e WORDPRESS_DB_HOST=(machine's IP address) -e WORDPRESS_DB_USER=user -e WORDPRESS_DB_PASSWORD=password -d wordpress

Nota: Esto supone que tengo una base de datos MySQL local configurada que acepta conexiones de 0.0.0.0 y tiene un usuario llamado user con contraseña password

Sé que mi contenedor se vincula correctamente a la base de datos al mirar los registros (y el hecho de que puedo acceder al sitio web, solo obtengo una página en blanco)

EDITAR 2: Mirando mi sistema de archivos contenedor de WordPress, puedo navegar por diferentes carpetas y ver contenido como temas/complementos que he instalado. ¿Por qué esto no se almacena en mi máquina local? (Lo siento si esta es una pregunta tonta, soy nuevo en MySQL y Docker)

  • ¿Puedes mostrar tu Dockerfile o un reproductor?

    – usuario2915097

    11 de junio de 2015 a las 14:09

  • No tengo un Dockerfile, sino que ejecuto solo un comando para que mi contenedor se ejecute. Lo único que le he hecho a mi base de datos MySQL es: me aseguré de que se estuviera ejecutando y me aseguré de que tuviera un usuario con privilegios para una base de datos de wordpress que creé.

    – kshah

    11 de junio de 2015 a las 14:17

  • siempre puedes entrar en el contenedor de WordPress docker exec -it container_id bash y use lsof o una herramienta similar para ver dónde está almacenado

    – usuario2915097

    11 de junio de 2015 a las 15:26

  • es registro.hub.docker.com/_/wordpress ¿Tu imagen acoplable?

    – Thomas Level

    11/06/2015 a las 16:30

  • @Thomasleveil sí, creo que esa es la imagen que estoy usando

    – kshah

    11 de junio de 2015 a las 16:58

Cuando ejecuta el contenedor de wordpress por primera vez, la secuencia de comandos de inicialización descarga el código base de wordpress para /var/www/html y luego inicie el servidor web. Dado que todo dentro de un contenedor es efímero, la base de código con cualquier cambio que realice se perderá cuando vuelva a ejecutar el contenedor. (a menos que simplemente detenga/inicie el contenedor, que no es la mejor opción para este escenario).

Lo que necesita es hacer que esta carpeta tenga datos persistentes. Para lograr esto, debe montar una carpeta desde la máquina host dentro del contenedor:

sudo docker run -p 80:80 \
   --name wordpress_local \
  -e WORDPRESS_DB_HOST=(machine's IP address) \
  -e WORDPRESS_DB_USER=user \
  -e WORDPRESS_DB_PASSWORD=password \
  -d \
  -v `pwd`/html:/var/www/html \
  wordpress

No olvides que la carpeta ya debe estar creada: mkdir -p data

  • Ya veo. Sin embargo, todavía no entiendo qué propósito tiene mi base de datos MySQL. ¿No debería mi base de datos almacenar los datos en algún directorio local? ¿Por qué necesito una base de datos si uso este método para montar una carpeta en mi máquina?

    – kshah

    15 de junio de 2015 a las 14:42

  • Además, cuando menciona “volver a ejecutar el contenedor”, ¿se refiere a enviar el contenedor a una imagen y luego ejecutar la imagen? El único escenario en el que haría esto es si decidiera enviar la imagen a un repositorio y quisiera ejecutar el sitio web en, digamos, una máquina diferente. En este escenario, ¿no tendría que copiar los archivos en la carpeta montada en mi máquina?

    – kshah

    15 de junio de 2015 a las 14:46

  • MySQL necesita un directorio local para almacenar los datos (en ubuntu/debian se coloca en /var/lib/mysql) y el contenedor de wordpress necesita un directorio diferente para guardar el código en ejecución, cargas, etc. Mis respuestas resuelven el problema de la persistencia de los datos de contenedor de wordpress.

    – george.yord

    18 de junio de 2015 a las 8:52

  • En cuanto a “volver a ejecutar el contenedor”, cuando correr envase desde una imagen, crea agregar una capa de archivo de lectura y escritura en la parte superior de la imagen. Esta capa de archivo se pierde cuando mata/elimina el contenedor, por lo que cuando correr nuevamente el contenedor se crea una nueva capa de archivo sin los datos del perdido. Para que esta capa de archivo persista, debe usar la solución descrita en mi respuesta. Obtenga más información para los estados de los contenedores aquí

    – george.yord

    18 de junio de 2015 a las 8:52

  • Ha respondido a mi pregunta, pero si también pudiera preguntar: ¿cuál es el punto de enviar un contenedor a una imagen si se perderá el sistema de archivos? ¿O estoy malinterpretando algo?

    – kshah

    19 de junio de 2015 a las 15:53

¿Ha sido útil esta solución?