Acabo de actualizar a Docker Desktop 2.4 en MacOS, desde la versión 2.3. De repente, ninguno de mis contenedores mysql se iniciará. Los registros muestran esto como la razón:
Different lower_case_table_names settings for server ('2') and data dictionary ('0'). Data Dictionary initialization failed. AbortingLos archivos de la base de datos están montados en un volumen en mi máquina host, de modo que persisten entre reinicios.
Finalmente descubrí por qué. Publicar para responder.
Otra opción es crear un volumen APFS que distinga entre mayúsculas y minúsculas mediante la Utilidad de disco.
A diferencia de una partición, es posible compartir el espacio libre, por lo que no debe preocuparse por reservar suficiente espacio para ejecutar su base de datos.
Luego cree un enlace simbólico desde su proyecto a su volumen sensible a mayúsculas y minúsculas.
cd ~/my-project ln -s /Volumes/MySQL/project-db mysqlLa configuración lower_case_table_names le dice a mysql cómo almacenar y comparar nombres de tablas. Si el sistema de archivos en el que se almacena la base de datos no distingue entre mayúsculas y minúsculas, lo obligará a usar lower_case_table_names=2 .
El sistema de archivos de MacOS no distingue entre mayúsculas y minúsculas. Hasta Docker Desktop 2.4, el contenedor mysql aparentemente no sabía que el sistema de archivos subyacente no distingue entre mayúsculas y minúsculas y estableció lower_case_table_names=0 . Sin embargo, desde que se actualizó a Docker 2.4, Docker aparentemente es más inteligente acerca de cómo monta los volúmenes. Entonces, el contenedor se da cuenta de que se está ejecutando en un sistema de archivos que no distingue entre mayúsculas y minúsculas y fuerza lower_case_table_names=2 . El problema es que no puede cambiar el valor de lower_case_table_names después de inicializar la base de datos. Y dado que el diccionario de datos se inicializó con lower_case_table_names=0 , no podrá inicializarse con el servidor establecido en lower_case_table_names=2 .
La única solución que he encontrado es:
ACTUALIZACIÓN: consulte esta respuesta a continuación para obtener una mejor solución. Aparentemente no hay necesidad de bajar de categoría. En su lugar, puede deshabilitar "gRPC Fuse para compartir archivos", hacer una copia de seguridad de la base de datos, volver a habilitar gRPC fuse, eliminar la carpeta de datos de su base de datos y restaurar la base de datos desde la copia de seguridad.
Con la última ventana acoplable, puede deshabilitar gRPC Fuse para compartir archivos. (la configuración de gRPC Fuse está causando este problema, es incompatible con el diccionario de datos de 0)
Esto soluciona el problema... Puede detenerse aquí si está satisfecho, pero para usar el nuevo sistema de archivos puede:
ACTUALIZAR
Desde la versión 2.5, la configuración se ha movido a la página de 'características experimentales':
Docker eliminó esta opción en las actualizaciones recientes, logré resolver este problema en Windows al hacer esto
Ejecute un shell como administrador:
vaya a su volumen mysql montado localmente y ejecute
fsutil file setCaseSensitiveInfo ./ enablecréditos a https://github.com/docker/for-win/issues/12384#issuecomment-972845031
Como solución en el sistema operativo Windows, deshabilité WSL en Docker Desktop y me ayudó
Actualizar Después de las últimas actualizaciones de Docker Desktop, me vi obligado a configurar el directorio de Windows con datos de DB como sensible a mayúsculas y minúsculas