web-dev-qa-db-fra.com

Connectez-vous au conteneur MySQL Docker à partir de localhost?

J'ai une image mysql docker en cours d'exécution, voici à quoi ressemble le fichier docker-compose.yml:

db:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD: ""
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
  ports:
    - "3306:3306"

Cela fonctionne bien.

Ma question est la suivante: comment puis-je me connecter à l'instance MySQL s'exécutant sur ce conteneur à partir du client mysql en ligne de commande situé sur l'hôte (mon macbook)?

Clarifier:

  • J'ai un macbook avec Docker installé
  • J'ai un conteneur docker avec mysql
  • Je souhaite me connecter à l'instance mysql s'exécutant sur le conteneur susmentionné à partir du terminal sur mon macbook
  • Je ne veux PAS utiliser une commande docker pour rendre cela possible. Au lieu de cela, je souhaite utiliser le client mysql directement à partir du terminal (sans tunneling via un conteneur de menu fixe).

MySQL ne s'exécutant pas localement, le port 3306 doit donc être ouvert et prêt à être utilisé.

La commande que j'utilise pour démarrer le conteneur est la suivante: docker-compose run

41
Caleb

Utiliser docker-compose up

Puisque vous avez publié le port 3306 sur votre hôte docker, à partir de cet hôte même, vous vous connectez à 127.0.0.1:3306

Utiliser docker-compose run

Dans ce cas, la section de mappage de port du fichier docker-compose.yml est ignorée. Pour que la section de mappage de port soit prise en compte, vous devez ajouter l'option --service-ports

docker-compose run --service-ports db

Remarque additionnelle

Attention, par défaut, le client mysql essaie de se connecter en utilisant un socket unix quand vous lui dites de se connecter à localhost. Donc, utilisez 127.0.0.1 et non pas localhost:

 $ mysql -h 127.0.0.1 -P 3306 -u root

Bienvenue sur le moniteur MySQL. Les commandes se terminent par; ou\g . Votre identifiant de connexion MySQL est 1 Version du serveur: 5.6.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle et/ou ses filiales. Tous les droits sont réservés.

Oracle est une marque déposée d'Oracle Corporation et/ou de ses affiliés. Les autres noms peuvent être des marques commerciales de leurs détenteurs respectifs propriétaires.

Tapez 'aide'; ou '\ h' pour obtenir de l'aide. Tapez '\ c' pour effacer l'instruction d'entrée actuelle.

mysql>

$ mysql -h localhost -P 3306 -u root

ERREUR 2002 (HY000): Impossible de se connecter au serveur MySQL local via le socket '/var/run/mysqld/mysqld.sock' (2)

56
Thomasleveil

J? ai compris!! La solution consiste à utiliser l'option --service-ports lors de l'exécution de docker-compose

docker-compose run --service-ports db (le fichier original docker-compose.yml fonctionne bien) 

Merci à tous pour l'aide!

10
Caleb

Connectez-vous à MySQL via {Host ip}: 3306 puisque vous avez exposé le port interne à votre hôte en tant que 3306. Si vous devez accéder aux outils de l'interface de ligne de commande MySQL, vous devrez vous connecter docker exec -it mycontainer bash pour pouvoir accéder aux outils installé avec MySQL si vous ne les avez pas installés localement sur l'hôte o/s.

0
GHETTO.CHiLD

cela a fonctionné pour moi.

/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p
0
Swannie

Si votre hôte Docker MySQL fonctionne correctement, vous pouvez vous y connecter à partir de la machine locale, mais vous devez spécifier l’hôte, le port et le protocole comme suit:

mysql -h localhost -P 3306 --protocol=tcp -u root

Comme vous utilisez MySQL dans le conteneur Docker, le socket n’est pas disponible et vous devez vous connecter via TCP. Définir "--protocol" dans la commande mysql changera cela.

0
maniekq

Votre fichier yml a l'air bien.

Vous pouvez connecter directement le conteneur Docker directement car il est déjà mappé sur le port local 3306 . 

mysql -h 127.0.0.1 -u root -p

Remarque: vous devez avoir accès à la ligne de commande mysql. Si la commande mysql affiche une erreur, vérifiez '/ usr/local/mysql/bin' sinon vous ne pouvez pas vous connecter au serveur mysql. En d'autres mots, vous devez avoir le client mysql sur votre machine.

0
Virendra Jadeja