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:
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
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
.
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
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)
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!
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.
cela a fonctionné pour moi.
/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p
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.
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.