簡體   English   中英

Docker容器bash無法通過套接字連接到本地MySQL服務器

[英]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接口的應用程序是否應該使用端口330612345

我覺得這部分很混亂。 謝謝!

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM