Docker容器bash无法通过套接字连接到本地MySQL服务器

时间:2016-08-24 20:44:45

标签: mysql docker docker-container

这是一个很长的标题,但它应该足够明确。

如果我使用bash运行docker容器并通过apt-get install mysql-server安装mysql,请运行以下命令:mysql -u root -p

我遇到了响亮的声音:

  

ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器   ' /var/run/mysqld/mysqld.sock' (2)

几乎所有安装并使用网络的东西都是如此。

这是否意味着我应该EXPOSE端口3306?如果该端口在主机(容器外)上使用但容器内的所有应用程序都希望调用该端口,该怎么办? ie:当我在暴露12345:3306时运行容器时,使用lo接口的应用程序是否应使用端口330612345

我发现这部分非常令人困惑。 谢谢!

1 个答案:

答案 0 :(得分:0)

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>