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

22

这实际上是一个关于如何通过Docker连接本地服务的一般性问题。Github问题中有类似的问题这里,但似乎没有解决方案。我真正需要的是能够在本地开发MySQL服务器的情况下进行本地开发,然后一旦准备部署,就可以针对新创建的部署候选Docker镜像进行本地测试。

理想情况下,两者都可以从同一位置获取设置,所以我可以放置mysql_server:host_ip。这似乎是一个典型的用例。目前是否有任何这样的可能性?

我特别使用Boot2Docker,并在我的主机mac的OS X Yosemite上运行MySQL服务器,而不是在容器中运行。但希望未来读者能获得更通用的答案。

4个回答

19

Docker CLI 文档 提供了以下解决方案(假设您在 Linux 主机上运行):

有时候您需要从容器内部连接到 Docker 主机。为了实现这个目的,可以使用 --add-host 标志将 Docker 主机的 IP 地址传递给容器。要查找主机地址,请使用 ip addr show 命令。

您传递给 ip addr show 的标志取决于您在容器中使用 IPv4 还是 IPv6 网络。对于名为 eth0 的网络设备,使用以下标志来检索 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,则会在预定义的地址上设置与主机的映射,因此在该平台上,相当于以上内容的只需一个命令:

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

3
很好,但据我所知它在Mac上不起作用。默认情况下未安装“ip”命令,并且我找不到任何安装它的方法(“ip”是一个难以搜索的东西)。你能否提供更多有关在Mac上使其工作的建议? - Eli
2
如果使用 Boot2Docker,它会将 Mac 主机设置为 192.168.59.3。 - Bryan
2
@jaycode 是的,这是一个MySQL Brew问题。答案在这里:http://stackoverflow.com/questions/27617343/connecting-to-mysql-server-on-localhost-through-docker - Eli
1
@JosephSiefers 我不太记得去年我是通过哪些步骤得出那个结论的,但它在 CLI README 中被提及为默认配置,并且可以在 源代码 中看到。 - Bryan
2
@maxgalbu 很好的观点。Docker已经改变了他们的建议,所以我编辑了我的答案。现在需要知道带有IP地址的网络设备的名称。 - Bryan
显示剩余6条评论

10

要连接本地MySQL,您可以在docker run命令中使用--network="host"。然后,在您的docker容器中,127.0.0.1或localhost将指向您的docker主机。

docker run --network="host" -p 8080:8080 <your-docker-Image>

0
为了帮助解决一些额外的问题和主要的帖子,我想提供一个链接到我一直在管理本地开发的存储库。我已经停止尝试在OS X上直接运行任何开发服务,并使用Docker容器,因为它们与生产环境完全相同,可以匹配和优化我的环境。
这个存储库包括一个Web服务器、数据库服务器和一个数据容器来加载MySQL数据库。
我已经并将继续支持这个存储库,并最近升级了文档,使其对其他开发人员来说更加方便。 GitHub上的Docker存储库

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接