web-dev-qa-db-fra.com

Comment puis-je accéder à mon docker maria db?

Ma principale question est qu'après avoir créé un conteneur docker pour ma mariadb avec la commande docker run --name db -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mariadb comment accéder à la base de données sql?

Quelque part, j'ai vu une solution utilisant un conteneur temporel (après la sortie, le conteneur est supprimé), mais je ne le trouve plus.

Je recherche une commande comme: Sudo docker exec -it [other flags] [command] db.

12
MorRich

Se connecter à MariaDB à partir du client de ligne de commande MySQL La commande suivante démarre une autre instance de conteneur mariadb et exécute le client de ligne de commande mysql sur votre conteneur mariadb d'origine, vous permettant d'exécuter des instructions SQL sur votre instance de base de données:

$ docker run -it --link some-mariadb:mysql --rm mariadb sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

... où some-mariadb est le nom de votre contenant de mariadb d'origine.

Plus d'informations sur le client de ligne de commande MySQL peuvent être trouvées dans la documentation MySQL

Voir: https://hub.docker.com/_/mariadb/

3
BMW

Juste client mysql, pas de conteneur docker supplémentaire

Installez le client mysql sur votre hôte,

apt-get install mysql-client

puis utilisez la commande suivante pour accéder à votre conteneur de base de données.

mysql -u<user> -p<pass> -h $(docker inspect --format '{{ .NetworkSettings.IPAddress }}' <db-container>)

La commande obtiendra automatiquement l'IP de votre conteneur Docker.

Assurez-vous de remplacer <user>, <pass> et <db-container> avec vos valeurs respectives. Dans ton cas:

mysql -uroot -ptest -h $(docker inspect --format '{{ .NetworkSettings.IPAddress }}' db)

Votre commande permet à mariadb de s'exécuter sur le port standard 3306. Sinon, vous devez indiquer à la commande mysql le nouveau port.

7
michaelbahr

Syntaxe légèrement différente, docker 18.05.0-ce sur ubuntu 18.04:

Sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' db
2

de site officiel de Mariadb :

Connexion à MariaDB depuis l'extérieur du conteneur

Si nous essayons de nous connecter au serveur MariaDB sur localhost, le client contournera la mise en réseau et tentera de se connecter au serveur à l'aide d'un fichier socket dans le système de fichiers local. Cependant, cela ne fonctionne pas lorsque MariaDB s'exécute à l'intérieur d'un conteneur car le système de fichiers du serveur est isolé de l'hôte. Le client ne peut pas accéder au fichier socket qui se trouve à l'intérieur du conteneur, il ne parvient donc pas à se connecter.

Par conséquent, les connexions au serveur MariaDB doivent être établies à l'aide de TCP, même lorsque le client s'exécute sur la même machine que le conteneur de serveur.

La plupart des images MariaDB, y compris l'image officielle, ont des connexions externes TCP désactivées à l'aide de l'option bind-address dans leur fichier # my.cnf #. L'image de docker utilisée dans ce guide est basée sur Ubuntu, le fichier se trouve donc dans /etc/mysql/my.cnf.

Pour utiliser MariaDB, nous devrons modifier le fichier de configuration pour changer l'option appropriée, puis redémarrer le conteneur.

À l'intérieur du conteneur, modifiez le fichier my.cnf et recherchez la ligne qui commence par bind-address. Mettez un hachage au début de la ligne pour le commenter:

#bind-address            = 127.0.0.1

Enregistrez le fichier.

Toujours à l'intérieur du conteneur, envoyez la commande d'arrêt à MariaDB. Cela arrêtera le serveur et quittera également l'hôte:

mysqladmin -u root -p shutdown

Redémarrez le conteneur. Cette fois, le serveur MariaDB aura la mise en réseau activée:

docker start mariadbtest

Recherchez l'adresse IP qui a été attribuée au conteneur:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mariadbtest

Vous pouvez maintenant vous connecter au serveur MariaDB en utilisant une connexion TCP avec cette adresse IP).

Forcer une connexion TCP

Après avoir activé les connexions réseau dans MariaDB comme décrit ci-dessus, nous pourrons nous connecter au serveur depuis l'extérieur du conteneur.

Sur l'hôte, exécutez le client et définissez l'adresse du serveur ("-h") sur l'adresse IP du conteneur que vous avez trouvée à l'étape précédente:

mysql -h 172.17.0.2 -u root -p

Cette forme simple de connexion devrait fonctionner dans la plupart des situations. Selon votre configuration, il peut également être nécessaire de spécifier le port du serveur ou de forcer TCP:

mysql -h 172.17.0.2 -P 3306 --protocol=TCP -u root -p

Configuration de port pour les conteneurs en cluster et la réplication

Plusieurs serveurs MariaDB exécutés dans des conteneurs Docker distincts peuvent se connecter les uns aux autres à l'aide de TCP. Ceci est utile pour former un cluster Galera ou pour la réplication.

Lorsque vous exécutez un cluster ou une configuration de réplication via Docker, nous souhaitons que les conteneurs utilisent différents ports. Le moyen le plus rapide d'y parvenir est de mapper les ports de conteneurs sur différents ports de notre système. Nous pouvons le faire lors de la création des conteneurs (commande docker run), en utilisant l'option -p, plusieurs fois si nécessaire. Par exemple, pour les nœuds Galera, nous utiliserons un mappage similaire à celui-ci:

-p 4306:3306 -p 5567:5567 -p 5444:5444 -p 5568:5568
1
Octavius