如何通过Docker连接到本地MySQL服务器?

这对于如何通过Docker连接到本地服务来说更是一个普遍的问题。 在Github的问题上也有类似的问题,似乎没有任何解决办法。 我真正想要的是能够在本地开发本地开发MySQL服务器,然后一旦我准备好部署,本地testing新创build的部署候选docker图像。

理想情况下,两者都从同一地点获得设置,所以我可以把mysql_server: host_ip 。 这似乎是一个典型的用例。 目前有这样的可能吗?

我正在使用Boot2Docker,特别是在主机上的Mac OS X Yosemite不在容器中运行的MySQL服务器上。 尽pipe对未来的读者有一个更一般的答案会很酷。

Docker CLI文档给出了这个解决scheme(假设你正在Linux主机上运行):

有时您需要从容器内连接到Docker主机。 要启用此function,请使用--add-host标志将Docker主机的IP地址传递给容器。 要查找主机地址,请使用ip addr show命令。

您传递给ip addr show的标志取决于您在容器中使用IPv4还是IPv6networking。 对于名为eth0的networking设备,请使用以下标志来检索IPv4地址:

 $ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1` $ docker run --add-host=docker:${HOSTIP} --rm -it debian 

然后,容器内的名称docker将映射到主机的IP地址。 对于你的情况,你可以使用docker run --add-host=mysql_server:$(hostip) ...

如果使用Boot2Docker,它将在一个预定义的地址上build立到主机的映射,所以在这个平台上,与上面的等价物只是一个命令:

 $ docker run --add-host=docker:192.168.59.3 --rm -it debian 

为了帮助其他几个问题和主要的post,我想链接到一个回购,我一直在pipe理我的本地发展。 我已经停止尝试直接在OS X上为我的开发运行任何服务,并使用Docker容器,因为它们与生产中完全相同,我的环境可以匹配和精简。

这个回购包括一个Web服务器,数据库服务器和一个数据容器来加载MySQL数据库。

我已经并将继续支持这个回购协议,并且最近升级了文档,使其成为其他开发者的钥匙。

Docker Repo在GitHub上

在使用boot2docker的mac上,可以通过添加Mac OS Host来使用自制软件的默认mysql / mariadb设置。

这工作对我来说(我相信,是默认设置)。