web-dev-qa-db-fra.com

Comment se connecter à MySQL exécuté sur Docker à partir de la machine hôte

J'ai déjà googlé sur ce sujet et trouvé quelques discussions. Sur la base de ces fils, j'ai suivi les étapes suivantes. Mais je fais face à un problème.

Fondamentalement, je veux créer une image docker pour mysql, puis me connecter à partir de ma machine hôte (Mac OS X).

Basé sur this post, je dois partager le socket mysql unix avec l'hôte. vers cela, j'ai fait les étapes suivantes

1. Start docker quick terminal
2. docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest
3. docker exec -it mysql bash
4. mysql -uroot -p
5. create database MyDB;
6. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
7. exit;
8. mkdir /Users/abhi/Host
9. docker run -it -v /Host:/shared mysql/mysql-server:latest

Maintenant, je reçois l'erreur

MacBook-Pro:~$ docker run -it -v /Users/abhi/Host:/shared mysql/mysql-server
error: database is uninitialized and password option is not specified
  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

Mais vous voyez que j'ai fourni le mot de passe et initialisé ma base de données.

Tout ce que je veux, c'est que depuis ma machine hôte, je puisse me connecter à la base de données mysql fonctionnant à l'intérieur de docker.

EDIT :: ----- solution qui a fonctionné ------

Merci RICO. Enfin, les étapes qui ont fonctionné pour moi sont

1. Start docker quick terminal
2. docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest
3. docker exec -it mysql bash
4. mysql -uroot -p
5. create database MyDB;

  or:
  CREATE USER 'root'@'%' IDENTIFIED BY 'root';
  GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

6. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
7. exit;
8. docker-machine env default

Utilisez l'adresse IP obtenue à l'étape 8. le port est 3306, l'utilisateur est root, le mot de passe est le mot de passe, la base de données est MyDB.

La connexion est réussie!

14
Knows Not Much

Donc, fondamentalement, vous devez exposer le port mysql à votre hôte:

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest

Ensuite, vous pouvez accéder à partir de votre hôte en utilisant la ligne de commande mysql:

mysql -h127.0.0.1 -ppassword -uroot

Je ne sais pas pourquoi vous essayez d'exécuter un autre conteneur pour vous connecter (vous vouliez peut-être lier deux conteneurs)

Si vous utilisez Mac (ou Windows) avec docker-machine, vous souhaitez vous connecter à l'adresse IP de votre VM docker-machine. Par exemple:

$ docker-machine ssh default
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.9.0, build master : 16e4a2a - Tue Nov  3 19:49:22 UTC 2015
Docker version 1.9.0, build 76d6bc9
docker@default:~$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 08:00:27:E6:C7:20
          inet addr:192.168.99.100  Bcast:192.168.99.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fee6:c720/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18827 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10280 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1791527 (1.7 MiB)  TX bytes:2242596 (2.1 MiB)

Connectez-vous ensuite à:

mysql -h192.168.99.100 -ppassword -uroot
16
Rico