> Faqs > ¿Cómo acceder a una base de datos MySQL / MariaDB en un contenedor Docker creado con Laravel Sail?

¿Cómo acceder a una base de datos MySQL / MariaDB en un contenedor Docker creado con Laravel Sail?

Si queremos acceder a una base de datos MySQLo MariaDB que está creada en un contenedor Docker, con Laravel Sail. ¿Cómo se puede hacer?

La idea es acceder usando un software como HediSQL, TablePlus, SequelPro, etc. para poder ver los datos que tenemos en la base de datos y poder administrar MySQL o MariaDB si fuera necesario, por ejemplo restaurar un backup.

Además, encontramos una tesitura especial ¿Qué pasa si tengo otro software sistema gestor de base de datos instalado en mi ordenador, como host? Por ejemplo, en este ordenador tengo MySQL insalado, corriendo en el puerto 3306 y el servidor MariaDB que me crear Sail en un contenedor entiendo que estaría en el mismo puerto, con lo que no podría acceder.

En fin ¿Cómo proceder para el acceso a MySQL / MariaDB, que tenemos en el contenedor Docker creado por Sail y gestionar las posibles incompatibilidades de los puertos?

Respuestas

En realidad no necesitas hacer nada en especial. Yo no tengo la configuración FORWARD_DB_PORT y me funciona perfectamente.

Simplemente accedo con estos datos:

  • host: 127.0.0.1
  • User: Lo que hay en DB_USERNAME del .env
  • Password: Lo que hay en DB_PASSWORD del .env
  • database: Lo que hay en DB_DATABASE del .env
  • Puerto: Si no lo has cambiado es siempre 3306. Si no, lo que tengas en el DB_PORT del .env

De todos modos igual en algunas instalaciones sí que sea necesario hacer el FORWARD_DB_PORT como dice Miguel en su respuesta. Sobre todo imagino que será necesario si necesitas entrar con otro puerto a la base de datos.

Julian
1100 46 84 45

Si quieres acceder a MySQL prueba primero con un terminal, usando el cliente de MySQL que probablemente tengas instalado en tu sistema.

Los datos de acceso los puedes ver en el .env

El comando de acceso a MySQL lo tienes aquí:

mysql -h 127.0.0.1 -u sail -p
  • Tienes que usar la IP de Localhost. Si no usas la IP 127.0.0.1 y pones simplemente localhost como host puedes obtener un mensaje de error ERROR 2002 (HY000): Can't connect to local server through socket '/tmp/mysql.sock' (2).
  • Tienes que modificar tu usuario "sail" es en mi instalación pero no tiene por qué ser el mismo en la tuya
  • El password de acceso a mysql lo tienes en el .env, en mi caso es "password"
Santiago
561 18 44 21

Primero que nada, asegúrate que en el archivo docker-compose.yml tienes definida la imagen de tu base de datos. Echa un vistazo al código y verás que usa varias variables de .env para generar los datos de configuración de la imagen.

Aunque en la documentación de Laravel no lo menciona, al menos por el momento, es posible definir que quieres que MySQL o MariaDB esté disponible en un puerto determinado del ordenador host.

Para ello, tienes que editar el archivo .env y colocar esta línea:

FORWARD_DB_PORT=3306

Aunque, si tienes ocupado ya ese puerto 3306 en el ordenador host, porque exista otro sistema gestor de base de datos MySQL o MariaDB instalado y corriendo directamente en la máquina, podrías hacer un forward de otro puerto cualquiera:

FORWARD_DB_PORT=3307

Una vez editado el .env tienes que parar sail y volverlo a arrancar.

Los datos de conexión a MySQL / MariaDB / PostgreSQL son los que tienes el el .env de tu proyecto Laravel en local, ya que el archivo de configuración docker-compose.yml simplemente lee esos datos para crear las imágenes y hacer el aprovisionamiento de las bases de datos.

El puerto de conexión será el que tienes en la variable de entorno que acabo de mencionar: FORWARD_DB_PORT

Ahora, en HeidiSQL, que es el sodtware de acceso a MySQL que estoy usando ahora, configuro la conexión con los siguientes valores:

  • Tipo de red: MariaDB or MySQL (TCP/IP)
  • Host: 127.0.0.1
  • Usuario: sail
  • Password: password
  • Puerto: 3307
  • Base de datos: laravel
Miguel Angel
3140 140 209 17
Buenas ya realice lo que se ha indicado pero al intentar crear una nueva DB desde HeidiSql me aparece el siguiente error: SQL error (1044): Access denied for user. me podrían ayudar con esto por favor Revisa que estés usando los datos de conexión que tienes configurados en el .env para el proyecto laravel sail que cuya base de datos estás intentando acceder.