通过Docker连接到本地主机上的MySQL服务器

所以,我通常可以通过运行带有--add-host=localbox:192.168.59.3的容器来通过Docker联系我的本地--add-host=localbox:192.168.59.3ping localbox工作得很好。 问题是,我似乎甚至无法从MySQL服务器获得响应。 mysql -h localbox ,从mysql -h localbox容器外工作正常,只是让我ERROR 2003 (HY000): Can't connect to MySQL server on 'localbox' (111)从内的ERROR 2003 (HY000): Can't connect to MySQL server on 'localbox' (111)

我已经完成GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

我在/etc/my.cnf中添加了bind-address = 0.0.0.0 。 这些都没有帮助。 是什么赋予了?

上下文:我正在通过OS X Yosemite上的boot2docker运行所有这些。

所以,事实certificate,这是一个真正可疑的devise决定自制的错误。 通过运行build议的launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist启动自制软件中的mysql-server。 但是,当检查这个文件时,你会发现绑定地址是硬编码的!

  <array> <string>/usr/local/opt/mysql/bin/mysqld_safe</string> <string>--bind-address=127.0.0.1</string> <string>--datadir=/usr/local/var/mysql</string> </array> 

所以,不pipe你在my.cnf文件中做什么,它总是被绑定到127.0.0.1,你将永远无法从容器中查询。 我的修复是直接编辑这个文件,而不是提供一个绑定地址,所以我们可以让/etc/my.cnf为我们做。 另外,虽然我不会推荐它,你可以直接在这个文件中更改绑定地址。

您可以将mac主机的networking添加到docker容器(运行在boot2docker中)

 --add-host=dh:10.0.2.2 

作为您的docker运行命令或使用的一部分

 extra_hosts: - "dh:10.0.2.2" 

在您的docker-compose.yml文件中。

在这之后,从安装了客户端的容器连接到mysql就像(eg)一样简单:

 $ mysql -h dh -uroot -p1234 

此解决scheme不需要修改mariadb / mysql安装的设置,即使它绑定到127.0.0.0。