简单地说

我想在docker容器中运行mysql,并从我的主机连接到它。到目前为止,我所取得的最好成绩是:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

更多的细节

我正在使用以下Dockerfile:

FROM ubuntu:14.04.3
RUN apt-get update && apt-get install -y mysql-server

# Ensure we won't bind to localhost only
RUN grep -v bind-address /etc/mysql/my.cnf > temp.txt \
  && mv temp.txt /etc/mysql/my.cnf

# It doesn't seem needed since I'll use -p, but it can't hurt
EXPOSE 3306

CMD /etc/init.d/mysql start && tail -F /var/log/mysql.log

在有这个文件的目录中,我可以成功地构建图像并运行它:

> docker build -t my-image .
> docker run -d -p 12345:3306 my-image

当我附加到图像时,它似乎工作得很好:

# from the host
> docker exec -it <my_image_name> bash

#inside of the container now
$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
[...]

然而,我并没有从主持人那里得到太多的成功:

> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

更多细节

我看到有一个问题看起来像我的。然而,这是不一样的(它没有任何答案) 我已经看到有专门的mysql映像,但我没有更多的成功与他们 我的grep -v可能感觉很奇怪。诚然,也许有更清洁的方法。但是当我附加我的图像时,我可以观察到它实际上按预期工作(即:删除绑定地址)。我可以在容器/var/log/mysql/error.log中看到:

服务器主机名(bind-address): '0.0.0.0';端口:3306 - '0.0.0.0'解析为'0.0.0.0'; 在IP: '0.0.0.0'上创建的服务器套接字。


当前回答

简单的方法是将mysql unix套接字共享给主机。然后通过插座连接

步骤:

为主机创建共享文件夹,例如:mkdir /host 运行docker container with volume mount option docker Run -it -v /host:/shared <mysql image>。 然后修改mysql的配置文件/etc/my.cnf,修改文件中的socket条目为socket=/shared/mysql.sock 在docker中重启MySQL服务 最后从主机通过套接字MySQL -u root——socket=/host/ MySQL .sock连接到MySQL服务器。如果密码使用-p选项

其他回答

将“localhost”更改为您的真实con IP地址 因为它指向mysql_connect()

我尝试过同样的事情,我也面临着同样的问题,但我注意到一件事,每当我试图用/bin/bash运行docker容器时,如下所示:

docker容器运行-it——name test_mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql:最新/bin/bash

在点击上面的命令后,我的容器启动,但面临同样的错误“error 2002 (HY000):不能连接到本地MySQL服务器通过socket '/var/run/mysqld/mysqld。袜子”(2)

现在,我尝试用下面的命令代替上面的命令:

docker容器运行-itd——name test_mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql:最新的

Docker容器exec test_mysql /bin/bash

然后使用命令

mysql -uroot -P3306 -p

希望这个想法对你有用。

谢谢 爱Arora

简单的方法是将mysql unix套接字共享给主机。然后通过插座连接

步骤:

为主机创建共享文件夹,例如:mkdir /host 运行docker container with volume mount option docker Run -it -v /host:/shared <mysql image>。 然后修改mysql的配置文件/etc/my.cnf,修改文件中的socket条目为socket=/shared/mysql.sock 在docker中重启MySQL服务 最后从主机通过套接字MySQL -u root——socket=/host/ MySQL .sock连接到MySQL服务器。如果密码使用-p选项

执行以下命令运行container

docker run --name db_name -e MYSQL_ROOT_PASSWORD=PASS--publish 8306:3306 db_name

运行此命令获取主机中的mysql数据库

mysql -h 127.0.0.1 -P 8306 -uroot  -pPASS

对你来说就是这样

mysql -h 127.0.0.1 -P 12345 -uroot  -pPASS

如果这能帮到别人的话:

我的首选方案

添加~/.my.cnf的内容

[client]
user=<yourusername>
password=typethepasswordhere
host=127.0.0.1
port=3306

然后从终端运行>$ mysql,你应该在你的SQL cmd。

硬核替代品

你也可以这样连接

docker exec -it containername mysql  

进入sql cmd

or

docker exec -it contaiinername bash (or sh) 

在容器中连接,然后运行>$ mysql