for - ¿Conectarse al contenedor Docker MySQL desde localhost?
localhost docker container (7)
Usando
docker-compose up
Desde que publicó el puerto
3306
en su
host docker
, desde ese host mismo se conectaría a
127.0.0.1:3306
.
Usando
docker-compose run
En ese caso, se ignora la sección de asignación de
docker-compose.yml
archivo
docker-compose.yml
.
Para tener en cuenta la sección de asignación de puertos, debe agregar la opción
--service-ports
:
docker-compose run --service-ports db
Nota adicional
Tenga en cuenta que, de manera predeterminada, el cliente mysql intenta conectarse utilizando un socket Unix cuando le dice que se conecte a
localhost
.
Entonces use
127.0.0.1
y no
localhost
:
$ mysql -h 127.0.0.1 -P 3306 -u root
Bienvenido al monitor MySQL. Los comandos terminan con; o / g. Su ID de conexión MySQL es 1 Versión del servidor: 5.6.26 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle y / o sus filiales. Todos los derechos reservados.
Oracle es una marca registrada de Oracle Corporation y / o sus filiales. Otros nombres pueden ser marcas registradas de sus respectivos propietarios.
Escriba "ayuda"; o ''/ h'' para obtener ayuda. Escriba ''/ c'' para borrar la declaración de entrada actual.
mysql>
$ mysql -h localhost -P 3306 -u root
ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket ''/var/run/mysqld/mysqld.sock'' (2)
Tengo una imagen docker mysql ejecutándose, a continuación se muestra el aspecto del archivo docker-compose.yml:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: yes
ports:
- "3306:3306"
Esto funciona bien
Mi pregunta es: ¿Cómo puedo conectarme a la instancia de MySQL que se ejecuta en ese contenedor desde la línea de comandos del cliente mysql en mi host (mi macbook)?
Para aclarar:
- Tengo un macbook con Docker instalado
- Tengo un contenedor acoplable con mysql
- Quiero conectarme a la instancia de mysql que se ejecuta en el contenedor mencionado desde la Terminal en mi macbook
-
NO quiero usar un comando
docker
para que esto sea posible. Más bien, quiero usar el clientemysql
directamente desde la Terminal (sin hacer un túnel a través de un contenedor acoplable).
No tengo MySQL ejecutándose localmente, por lo que el puerto 3306 debe estar abierto y listo para usar.
El comando que estoy usando para iniciar el contenedor es:
docker-compose run
¡¡Lo tengo!!
La respuesta es usar la opción
--service-ports
cuando se ejecuta
docker-compose
:
docker-compose run --service-ports db
(el archivo original docker-compose.yml funciona bien)
¡Gracias a todos por la ayuda!
Conéctese a MySQL a través de {host ip}: 3306 ya que ha expuesto el puerto interno a su host como 3306. Si necesita acceder a las herramientas de CLI de MySQL, deberá ir a
docker exec -it mycontainer bash
esto lo colocará dentro del contenedor para acceder a las herramientas instaladas con MySQL si no las tiene instaladas localmente en el host o / s.
Esto funcionó para mí.
/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p
Si su host Docker MySQL se ejecuta correctamente, puede conectarse a él desde la máquina local, pero debe especificar el host, el puerto y el protocolo de esta manera:
mysql -h localhost -P 3306 --protocol=tcp -u root
Debido a que está ejecutando MySQL dentro del contenedor Docker, el socket no está disponible y necesita conectarse a través de TCP. Establecer "--protocol" en el comando mysql cambiará eso.
Su archivo yml se ve bien.
Puede conectar directamente el contenedor Docker directamente, ya que ya está asignado con el puerto local 3306. Simplemente vaya a la terminal y ejecute
mysql -h 127.0.0.1 -u root -p
Nota: debe tener acceso a la línea de comando mysql. Si el comando mysql muestra un error, marque ''/ usr / local / mysql / bin''; de lo contrario, no podrá conectarse al servidor mysql. En otras palabras, debe tener un cliente mysql en su máquina.
Una forma sencilla de iniciar sesión en MySQL dentro de una imagen de Docker es:
sudo docker exec -it <IMAGE_ID> mysql -u root -p
para la contraseña predeterminada de la cuenta
root
de mySQL no está establecida, está EN BLANCO, solo presione la tecla enter / return, a menos que haya cambiado la contraseña raíz.
En la ejecución exitosa, el comando anterior le da un mensaje mysql.
¡Salud!