与在docker中运行的mysql连接缓慢

我为mysql安装了一个docker镜像。

docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD="Foo" -e DB_REMOTE_ROOT_NAME=root -e DB_REMOTE_ROOT_PASS="foo" -e DB_USER=foo -e DB_PASS="foo" -e DB_NAME=foo -v /:/host -v /home/user1/data/mysql:/var/lib/mysql mysql:latest 

一切都很好,我可以通过两种方式连接到MySQL

 docker exec -it mysql bash mysql -ufoo -pfoo foo 

并从我的Mac控制台(无docker执行)

 mysql -ufoo -pfoo -h0.0.0.0 foo 

我看到的问题是,第二种方法需要很长时间来连接。 它连接成功,但有一个15至20秒的延迟。

而在docker执行它瞬间连接。

为什么有一个延迟,当我从我的Macterminal直接使用MySQL而不是第一个SSH连接到盒子?

我试图用localhostreplace0.0.0.0。 但后来我得到一个错误

 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 

编辑::

我尝试了以下,并没有真正的作品

 mysql -ufoo -pbar -h1x.1x.5x.14x foo mysql -ufoo -pbar -h127.0.0.1 foo mysql -ufoo -pbar -hmysql.local foo 

以上所有3个都有10秒的延迟

但是,如果我这样做

 docker exec -it mysql bash mysql -ufoo -pbar foo 

这是毫不迟疑的瞬间

你为什么使用0.0.0.0? 它可能是,它试图首先使用套接字连接,由于本地主机绑定(MySQL客户端行为)。

  1. 如果您使用docker-for-mac,请尝试localhost / 127.0.0.1
  2. 尝试把127.0.0.1 test.local这样的东西放到你的/etc/hosts文件中,并使用-htest.local – 连接速度是否更快?
  3. 你的mysql容器使用“dnsparsing”吗? 在/etc/mysql/my.ini中使用skip-name-resolve会更快吗? (可能与a也有关)如果与a没有关系,检查mysql容器是否有坏的DNS