2015-11-19 12 views
10

Ich habe bereits zu diesem Thema gegoogelt und nur wenige Threads gefunden. Basierend auf diesen Threads habe ich die folgenden Schritte ausgeführt. Aber ich stehe vor einem Problem.So stellen Sie eine Verbindung zu MySQL her, die auf dem Docker vom Host-Rechner läuft

Grundsätzlich möchte ich ein Docker-Image für mysql erstellen und dann von meinem Host-Computer (Mac OS X) verbinden.

Basierend auf this Post, muss ich den mysql Unix-Socket mit dem Host teilen. in diese Richtung habe ich die folgenden Schritte

getan
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 

Jetzt erhalte ich die Fehler

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 

Aber Sie sehen, dass ich das Passwort zur Verfügung gestellt haben und meine Datenbank initialisiert.

Alles, was ich will ist, dass von meinem Host-Rechner, ich kann eine Verbindung zu der MySQL-Datenbank innerhalb von Docker laufen.

EDIT :: ----- Lösung, die ------

Dank RICO gearbeitet. Schließlich werden die Schritte, die für mich gearbeitet sind

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

die Adresse in Schritt IP verwenden 8. Port 3306 ist, Benutzer root ist, das Passwort ist durch ein Passwort, Datenbank MyDB.

Verbindung ist erfolgreich!

Antwort

13

Also im Grunde Sie müssen Sie den MySQL-Port mit dem Host entlarven:

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

Dann können Sie von Ihrem Host-Zugriff auf die MySQL-Kommandozeile:

mysql -h127.0.0.1 -ppassword -uroot 

nicht sicher, warum Sie sind versuchen, einen anderen Container zum Verbinden zu starten (vielleicht wollten Sie zwei Container verbinden)

Wenn Sie Mac (oder Windows) mit docker-machine verwenden möchten Sie eine Verbindung mit der IP-Adresse von Ihre Docker-Maschine VM. Zum Beispiel:

$ 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 
[email protected]:~$ 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) 

dann eine Verbindung zu:

mysql -h192.168.99.100 -ppassword -uroot 
+0

Das ist nicht für mich arbeiten. Ich habe den ersten Befehl ausgeführt, der das Image und den Container erstellt hat. aber wenn ich versuche, eine Verbindung zu mysql von meinem Host mit dbvisualizer. es heißt "Kommunikationsfehler". Mein Host ist eine Mac-Maschine und mysql läuft nicht. Daher muss ich den dbvisualizer verwenden, um eine Verbindung zu mysql herzustellen, die in meinem Docker-Container ausgeführt wird. –

+1

@KnowsNotMuch das ist, weil Sie MacOS mit Docker-Maschine verwenden. Docker läuft nicht nativ auf MacOS, überprüfe meine Bearbeitung für die Frage. – Rico

Verwandte Themen