通过Docker连接到localhost上的MySQL服务器

时间:2014-12-23 09:18:54

标签: mysql docker boot2docker

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

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

我已将bind-address = 0.0.0.0添加到/etc/my.cnf中。这些都没有帮助。是什么给了什么?

背景信息:我在OS X Yosemite上通过boot2docker运行所有这些。

2 个答案:

答案 0 :(得分:4)

所以,事实证明这是自制软件的错误,设计决定非常值得怀疑。您可以通过运行推荐的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>

因此,无论您在my.cnf文件中执行什么操作,它都将始终绑定到127.0.0.1,并且您永远无法从容器中进行查询。我的修复只是直接编辑这个文件而不是提供绑定地址,所以我们可以让/etc/my.cnf为我们做。或者,虽然我不推荐它,但您可以直接在此文件中更改绑定地址。

答案 1 :(得分:1)

您可以使用

将mac主机的网络添加到docker容器(在boot2docker中运行)
--add-host=dh:10.0.2.2

作为docker run命令的一部分或使用

extra_hosts:
  - "dh:10.0.2.2"
你的docker-compose.yml文件中的

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

$ mysql -h dh -uroot -p1234

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