因此,我通过运行带有--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运行所有这些。
答案 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。