![](/img/trans.png)
[英]Mysql with docker: Can't connect to local MySQL server through socket
[英]Docker container bash can't connect to local MySQL server through socket
這是一個很長的標題,但它應該足夠明確。
如果我使用bash運行docker容器並通過apt-get install mysql-server
,請運行以下命令: mysql -u root -p
我遇到了一個響亮的聲音:
ERROR 2002(HY000):無法通過套接字'/var/run/mysqld/mysqld.sock'連接到本地MySQL服務器(2)
幾乎所有安裝和使用網絡的東西都是如此。
這是否意味着我應該EXPOSE
端口3306
? 如果該端口在主機(容器外)上使用但容器內的所有應用程序都希望調用該端口,該怎么辦? 即:當我在暴露12345:3306
時運行容器時,使用lo
接口的應用程序是否應該使用端口3306
或12345
?
我覺得這部分很混亂。 謝謝!
MySQL Docker容器未使用/ var / run鎖。 相反,嘗試通過顯式指定其IP地址直接尋址容器。
首先獲取容器的IP地址。 像這樣的東西:
export MYSQL_IP_ADDRESS=$(sudo docker inspect --format="{{ .NetworkSettings.IPAddress }}" mysql_db)
其中'mysql_db'是您給MySQL Docker容器的名稱。
您應該能夠“回應”您的IP地址:
corba@bilbovm01:~$ echo $MYSQL_IP_ADDRESS
172.17.121.2
然后在命令行上指定該主機名:
mysql -h $MYSQL_IP_ADDRESS -u root -p
要回答關於端口可見性的其他問題,我假設您正在使用hub.docker.com中的標准mysql / mysql-server映像。 該映像會自動公開3306,但您必須使用MYSQL_ROOT_HOST啟動它,以便它允許您從主機IP連接到它。 例如,我的主機IP地址是172.17.121.1。 所以我會像這樣啟動我的容器:
corba@bilbovm01:~$ sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=blat -e MYSQL_ROOT_HOST=172.17.121.1 mysql/mysql-server:latest
aa09bc5a30b8f84b68d760d828f8e451238405a177caef4ad802bef44ad43352
corba@bilbovm01:~$ mysql -h $MYSQL_IP_ADDRESS -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.