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

时间:2014-12-18 21:48:53

标签: docker

这是如何通过Docker连接到本地服务的一般问题。在Github问题here中有类似的问题似乎没有任何解决方案。我真正想要的是能够在我的本地开发MySQL服务器上进行本地开发,然后在我准备部署之后,针对新创建的部署候选docker镜像进行本地测试。

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

我正在使用Boot2Docker专门在我的主机mac的OS X Yosemite上运行的MySQL服务器不在容器中。如果对未来的读者有更普遍的答案,那将会很酷。

4 个答案:

答案 0 :(得分:17)

Docker CLI docs提供此解决方案(假设您在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

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

为了帮助解决其他几个问题和主要帖子,我想link to a repo我一直在设法管理我的本地开发。我已经停止尝试直接在OS X上为我的开发运行任何服务并使用Docker容器,因为它们在生产中运行完全相同,我的环境可以匹配和简化。

此repo由Web服务器,数据库服务器和用于加载MySQL数据库的数据容器组成。

我已经并将继续支持此回购,并且最近升级了文档,使其成为其他开发人员的关键。

Docker Repo on GitHub

答案 3 :(得分:0)

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

This worked for me (with, what I believe, are default settings).