Conectar Docker con tu MySQL local

18 de Febrero del 2021 - Escrito por Shadow Myst


Les había platicado de como Empece a usar Docker en mi distribución Linux Manjaro, les mencione que lo empece a usar para poder programar en PHP, pero me presente con un primer gran problema, conectarlo con mi base de datos.

No quería descargar una imagen Docker de MySQL porque ya tendría que pasar toda mi base de datos para a esa imagen Docker y aunque relativamente es fácil, quería buscar una forma de poder conectarme a mi base de datos porque estaba seguro de que debería de existir una forma.

Después de consultar en muchos lados, un amigo español de Telegram1 fue quien me dio la luz para poder resolver mi problema, que prácticamente consiste en configurar el usuario MySQL para que se puedan conectar remotamente y enviar tu IP adentro del contenedor.

Configurar usuario MySQL/MariaDB para que te puedas conectar remotamente2

En primer lugar tenemos que ir al archivo de configuración de MySQL por lo que tenemos que abrir el archivo /etc/mysql/my.cnf aunque en caso de mi computadora el archivo se encontraba en /etc/my.cnf.d/server.cnf y tenemos que descomentar las siguientes líneas.

  • skip-external-loking2
  • bind-address = 127.0.0.1

En primer lugar skip-external-loking no lo encontré, pero no tuve problemas despues y en bind-address debe ser cambiado a 0.0.0.0.

Reiniciamos el servicio de MySQL con sudo service mysql restart y entramos a nuestra base de datos con mysql -u root -p (usa el usuario que tú quieras para que se puedan conectar vía remota no recomiendo usar el root, así que en mi caso tengo otro usuario e hice lo siguiente.

GRANT ALL PRIVILEGES ON *.* TO shadowmyst@'%' IDENTIFIED BY 'mypassword';
FLUSH PRIVILEGES;

Con esto ya podemos conectarnos a nuestra base de datos de forma remota y es necesario para conectarnos a nuestro contenedor Docker.

Hacer la conexión de Docker a nuestra Base de Datos

Primero tenemos que saber que IP local tenemos, normalmente en una distribución Linux con ifconfig podemos configurar eso, pero en mi caso tuve que usar ip addr.

En manjaro es con el comando ip addr
En manjaro es con el comando ip addr

Como se puede ver mi IP Local es 192.168.100.5 y Docker tiene su propia IP 172.17.0.1 (que en este caso no usaremos la IP de Docker, pero es bueno tenerlo en cuenta), ahora solo nos falta el comando final para conectarnos.

docker run -p 80:80 -dt --add-host=database:192.168.100.5 -v $(pwd)/src:/var/www/html --name <nombreContenedor> <tuImagenDocker>

Ahora a explicar que es lo que acabamos de hacer con este último comando.

  1. En primer lugar con --add-host=<hostname>:<iphost> estamos agregando una ip al /etc/hosts interno de nuestro contenedor Docker que es lo que estábamos buscando y que con ello permitirá comunicar nuestra base de datos con lo que este adentro de nuestro Docker.
  2. Con el punto anterior ya se resuelve el problema que este post conlleva, sin embargo también les quiero compartir lo que hace -v $(pwd)/src:/var/www/html con este comando estamos diciendo que lo que esté en $(pwd)/src donde $(pwd)es la ruta actual donde nos encontramos y si editamos un archivo se cambiara automáticamente en /var/www/html de nuestro contenedor Docker, esto nos permite poder trabajar en nuestro contenedor, haciendo los cambios constantemente.

Por ahora es todo, espero que les sirva este post, la verdad estuve investigando varios días hasta que por fin di con el resultado por eso mismo se los quise compartir

Post también publicado en hive

  1. Agradezco a Andersson por ayudarme en esto y siempre resolver mis dudas 

  2. Esta parte esta basada en la información que encontre, así que está basado en lo que encontré y mi experiencia a aplicarlo  2