wake-up-neo.com

Verbindung zum Docker MySQL-Container von localhost?

Ich habe ein Docker-Mysql-Image ausgeführt. Nachfolgend sehen Sie die Datei docker-compose.yml:

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

Das funktioniert gut.

Meine Frage ist: Wie kann ich über den Befehlszeilen-MySQL-Client auf dem Host (meinem Macbook) eine Verbindung zu der MySQL-Instanz herstellen, die in diesem Container ausgeführt wird?

Zu klären:

  • Ich habe ein Macbook mit Docker installiert
  • Ich habe einen Docker-Container mit MySQL
  • Ich möchte eine Verbindung mit der mysql-Instanz herstellen, die in dem oben genannten Container vom Terminal auf meinem Macbook ausgeführt wird
  • Ich möchte NICHT einen docker-Befehl verwenden, um dies zu ermöglichen. Vielmehr möchte ich den mysql-Client direkt vom Terminal aus nutzen (ohne durch einen Docker-Container zu tunneln).

Da MySQL nicht lokal ausgeführt wird, sollte Port 3306 offen und einsatzbereit sein.

Der Befehl, den ich zum Starten des Containers verwende, lautet: docker-compose run

41
Caleb

docker-compose up verwenden

Da Sie den Port 3306 auf Ihrem docker-Host veröffentlicht haben, würden Sie von diesem Host selbst eine Verbindung zu 127.0.0.1:3306 herstellen. 

docker-compose run verwenden

In diesem Fall wird der Abschnitt für die Portzuordnung der Datei docker-compose.yml ignoriert. Um den Abschnitt für die Portzuordnung berücksichtigen zu können, müssen Sie die Option --service-ports hinzufügen: 

docker-compose run --service-ports db

Zusätzliche Anmerkung

Beachten Sie, dass der mysql-Client standardmäßig versucht, eine Verbindung über einen Unix-Socket herzustellen, wenn Sie ihn anweisen, eine Verbindung zu localhost herzustellen. Verwenden Sie also 127.0.0.1 und nicht localhost:

 $ mysql -h 127.0.0.1 -P 3306 -u root

Willkommen beim MySQL-Monitor. Befehle enden mit; oder\g . Ihre MySQL-Verbindungs-ID lautet 1 Server-Version: 5.6.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle und/oder ihre verbundenen Unternehmen. Alle Rechte vorbehalten.

Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer Mitgliedsorganisationen. Andere Namen sind möglicherweise Marken ihrer jeweiligen Besitzer.

Geben Sie "help" ein. oder '\ h' um Hilfe. Geben Sie '\ c' ein, um die aktuelle Eingabeanweisung zu löschen.

mysql>

$ mysql -h localhost -P 3306 -u root

FEHLER 2002 (HY000): Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/var/run/mysqld/mysqld.sock' (2) hergestellt werden.

56
Thomasleveil

Ich habe es verstanden!! Die Antwort ist, die --service-ports-Option zu verwenden, wenn Sie docker-compose ausführen: 

docker-compose run --service-ports db (die ursprüngliche docker-compose.yml-Datei funktioniert einwandfrei) 

Vielen Dank an alle für die Hilfe!

10
Caleb

Eine einfache Möglichkeit, sich in einem Docker-Image bei MySQL anzumelden, ist:

Sudo docker exec -it <IMAGE_ID> mysql -u root -p

für root ist das Standardkennwort nicht festgelegt. Es ist leer. Drücken Sie einfach die Eingabetaste, es sei denn, Sie haben das root-Kennwort geändert.

Bei erfolgreicher Ausführung erhalten Sie mit dem obigen Befehl eine mysql-Eingabeaufforderung.

Prost!

0
epsan

Stellen Sie über {Host ip}: 3306 eine Verbindung zu MySQL her, da Sie den internen Port als 3306 für Ihren Host verfügbar gemacht haben. Wenn Sie auf die MySQL-CLI-Tools zugreifen müssen, müssen Sie docker exec -it mycontainer bash eingeben mit MySQL installiert, wenn sie nicht lokal auf dem Host installiert sind.

0
GHETTO.CHiLD

das hat für mich funktioniert.

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

Wenn Ihr Docker MySQL Host ordnungsgemäß ausgeführt wird, können Sie eine Verbindung vom lokalen Computer aus herstellen. Sie sollten jedoch Host, Port und Protokoll wie folgt angeben:

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

Da Sie MySQL im Docker-Container ausführen, ist Socket nicht verfügbar und Sie müssen eine Verbindung über TCP herstellen. Die Einstellung "--protocol" im Befehl mysql ändert dies.

0
maniekq

Ihre Yml-Datei sieht gut aus.

Sie können einen Docker-Container direkt verbinden, da er bereits mit dem lokalen Port 3306 ..__ zugeordnet ist 

mysql -h 127.0.0.1 -u root -p

Hinweis: Sie müssen Zugriff auf die Befehlszeile von mysql haben. Wenn der mysql-Befehl einen Fehler anzeigt, prüfen Sie '/ usr/local/mysql/bin'. Andernfalls können Sie keine Verbindung zum mysql-Server herstellen. In anderen Worten müssen Sie einen MySQL-Client auf Ihrem Rechner haben.

0
Virendra Jadeja