Ariana, parte de este gran equipo, nos hizo el favor de redactar esta reseña porque controla a la perfección el tema.
Solución:
deberías despejar data_volume
antes de ejecutar el contenedor y se ejecutarán los archivos sql. este volumen data_volume
se puede eliminar usando el comando: docker volume rm data_volume
.
La causa raíz de su problema se puede encontrar en docker-entrypoint.sh
. Cuando ejecuta un contenedor mysql, verifica el directorio mysql /var/lib/mysql
existir o no. Si el directorio no existe (ejecútelo por primera vez), ejecutará sus archivos SQL.
if [ ! -d "$DATADIR/mysql" ]; then
//Some other logic here
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "$mysql[@]" < "$f"; echo ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "$mysql[@]"; echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done
Puede obtener más detalles en la fuente de Dockerfile
Así que tuve el mismo problema durante horas y luego decidí buscar en docker-entrypoint.sh. Resulta que el script busca $DATADIR/mysql, típicamente /var/lib/mysql y omite el resto del código si existe datadir, incl. ventana acoplable-punto de entrada-initdb.d
Entonces, lo que hice fue crear un archivo init.sh simple para eliminar el directorio de datos y luego iniciar la ventana acoplable.
docker-compose.yml:
volumes:
- ./docker/mysql/scripts:/docker-entrypoint-initdb.d
- ./mysql_data:/var/lib/mysql
init.sh:
#!/bin/bash
rm -rf mysql_data
docker-compose up --force-recreate
y por supuesto agregar -d
a docker-compose
una vez que veo que funciona como se esperaba.
Tuve exactamente el mismo problema con la imagen de mariadb (versión: 10.4) y lo resolví asegurándome de que el volumen de datos de mi contenedor esté vacío de cualquier archivo o directorio cuando creo el contenedor desde cero.
Este es mi archivo de composición docker:
mariadb: image: mariadb:10.4 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ******** volumes: - ./storage/db:/var/lib/mysql:rw - ./app/db/SQL:/docker-entrypoint-initdb.d/:rw ports: - 3306:3306/tcp
Para mí, solo tenía que asegurarme de que esta ruta: './storage/db' esté vacía de archivos. Tenga en cuenta que el directorio debe existir pero estar vacío.
Aquí tienes las comentarios y valoraciones
Si haces scroll puedes encontrar las reseñas de otros sys admins, tú asimismo tienes la opción de insertar el tuyo si te apetece.