from for container cannot mysql macos docker docker-compose

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 cliente mysql 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!