2017-06-02 2 views
2

habe ich eine test_mysql mit dem folgenden Befehl:Lokaler Host MySQL Verwirrung Docker verbinden

docker run -d -p 3306:3306 --name=test_mysql --env="MYSQL_ROOT_PASSWORD=123" mysql 

Ich habe die IP-Adresse mit docker inspect test_mysql. Die IP ist 172.17.0.2.

Das Merkwürdige ist, dass, wenn ich versuchte zu MySQL-Server auf meinem lokalen verbinden mit

mysql -uroot -p123 -h 172.17.0.2 -P 3306 

ein Fehler ausgelöst:

ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.2' (51) 

Allerdings, wenn ich die localhost IP-Adresse verwenden Sie stattdessen es hat funktioniert:

mysql -uroot -p123 -h 127.0.0.1 -P 3306 

Meine Frage ist, warum ich keine Verbindung zum Containerherstellen kannErgebnis während localhost IP funktioniert?

Antwort

1

1) während localhost IP funktioniert? Mal sehen, wieder Ihren Befehl Container zu starten:

docker run -d -p 3306:3306 --name=test_mysql --env="MYSQL_ROOT_PASSWORD=123" mysql 

Die -p 3306:3306 wird "binden" den Port 3306 von Host an den Port 3306 des Behälters. Als Ergebnis können wir sehen, dass, wenn irgendwelche Verbindungen zu Port 3306 kommen, diese an den Port des Containers weitergeleitet werden. Also, Ihre Verbindungen zu lokalen IP funktionieren:

mysql -uroot -p123 -h 127.0.0.1 -P 3306 

genauer ansehen auf Docker page

2), warum ich nicht in dem Behälter Verwendung Docker inspiziert verbinden kann Ergebnis

Es scheint, Ihren Container ist mit dem Standard-Bridge-Netzwerk verbunden (docker0 kann in Ihrem Fall IP: 172.17.0.1 haben), das bei der Installation von Docker häufig standardmäßig erstellt wird. Sie können weitere Details in Docker network page finden.Daher können Sie in Ihrem Container die Brücke "sehen" (Sie können versuchen, Ping-Befehl zu verwenden), aber von Ihrem lokalen Host kann es nicht wissen, wie die 172.17 finden/lösen. 0.2 und du hast diesen Fehler.