web-dev-qa-db-de.com

verbindung zum MySQL Docker kann nicht von lokal hergestellt werden

Ich versuche, vom Docker-Image eine Verbindung zur MySQL-Datenbank herzustellen. Es gibt jedoch Fehler. 

folgendes ist das Docker-Image, das ich verwende. https://hub.docker.com/_/mysql/

Und im Folgenden ist der Befehl, mit dem ich das Docker-Image ausgeführt habe. 

docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8

Es folgt die Ausgabe des Befehls docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                              NAMES
9f35d2e39476        mysql:8             "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        0.0.0.0:3306->3306/tcp

wenn ich die IP-Adresse mithilfe des Docker-Checks überprüfe und diese IP-Adresse ping, wird die IP-Adresse nicht erreicht. 

docker inspect 9f35d2e39476 | grep -i ipaddress

Und wenn ich versuche, mit localhost und 127.0.0.1 eine Verbindung herzustellen, erhalte ich folgende Fehlermeldung. 

Das Authentifizierungs-Plugin 'caching_sha2_password' kann nicht geladen werden.

5
Gaurang Shah

Ich hatte das gleiche Problem, aber dies tat ich nicht mit einem Docker-Container, auf dem mysql 8.X ausgeführt wurde. Ich habe mich im Container angemeldet

docker exec -it CONTAINER_ID bash

melden Sie sich dann als root bei mysql an

mysql --user=root --password

Geben Sie das Passwort für root ein (Standardeinstellung ist 'root') Zum Schluss Ausführen:

ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';

Du bist fertig.

Dies wurde bereits hier beantwortet: post

15
axelferreira

Beachten Sie zunächst, dass Sie nicht stabile Software verwenden, sodass zwischen den Releases große Änderungen und unerwartetes Verhalten auftreten können.

Zweitens können Sie Ihren Container nicht direkt pingen, er befindet sich in einem anderen Netz, Sie können ihn jedoch problemlos mit einem anderen Container anpingen.

Mysql 8 verwendet caching_sha2_password als standardmäßiges Authentifizierungs-Plugin anstelle von mysql_native_password. Mehr Infos hier .

Wenn Sie Probleme damit haben, können Sie das alte Authentifizierungs-Plugin wie folgt ändern:

docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
13
Ivan Beldad

Ich habe einen Fix hier gefunden, als er von Docker-Compose hochfuhr:

services:

  db:
    image: mysql
    command: mysqld --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

Das heißt, beim Start von MySQL vom neuen MySQL-Passwort-/Authentifizierungsmechanismus zurückkehren.

11
psychemedia

Wenn Sie versuchen, über das Terminal selbst eine Verbindung zu MySQL herzustellen, liegt möglicherweise eine fehlerhafte Version vor. Wenn Sie jedoch versuchen, mit einem GUI-Client, z. B. Sequel Pro, eine Verbindung zu MySQL herzustellen, wird die neue Authentifizierungsfunktion von MySQL 8 möglicherweise nicht unterstützt.

Um dies zu umgehen, starten Sie Ihren Docker-Container mit --default-authentication-plugin=mysql_native_password Kommando am Ende und MySQL verwendet standardmäßig die alte Authentifizierung:

docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 --default-authentication-plugin=mysql_native_password

1
Rohan

Dies wird wahrscheinlich als gelöst betrachtet, aber ich wollte dokumentieren, was es brauchte, um das zu überwinden. Ich hatte ein ähnliches Problem und das Zurücksetzen auf den alten Passwortstandard war keine Lösung. Ich musste das caching_sha2_password verwenden, also funktionierte nichts von mir und ich musste diesen Befehl verwenden:

docker run -it --rm mysql mysql -h 172.31.116.20 -p -P6603

Dabei ist 172.31.116.20 meine lokale IP-Adresse, an der der Container ausgeführt wird, und -P6603 ist der Port, auf dem er ausgeführt wird.

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
5092251b3dbf        mysql               "docker-entrypoint..."   16 minutes ago      Up 16 minutes       33060/tcp, 0.0.0.0:6603->3306/tcp   test1-mysql

Ich habe diese Lösung auf der Docker-Site für den MySQL-Container gefunden: https://hub.docker.com/_/mysql/

Es befindet sich im Abschnitt "Verbinden mit MySQL vom MySQL-Befehlszeilenclient".

0
Chris Clark