【问题标题】:How to connect to local MySQL server through Docker?如何通过 Docker 连接到本地 MySQL 服务器?
【发布时间】:2014-12-18 21:48:52
【问题描述】:

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

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

我正在将 Boot2Docker 与在我的主机 mac 的 OS X Yosemite 上运行的 MySQL 服务器一起使用,而不是在容器中。不过,如果能为未来的读者提供更通用的答案,那就太酷了。

【问题讨论】:

    标签: docker


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 这很好,但据我所知,它在 Mac 上不起作用。 ip 命令默认没有安装,我找不到任何安装它的方法(“ip”对于谷歌来说很难)。您能否就如何在 Mac 上运行此功能提供更多建议?
      • 如果使用Boot2Docker,它将Mac主机设置为192.168.59.3
      • 好的,所以我现在可以通过 Docker 联系 localhost(即使用 --add-host=localbox:192.168.59.3 运行),但 MySQL 仍然不支持连接:$ mysql -h localbox ERROR 2003 (HY000): Can't connect to MySQL server on 'localbox' (111)
      • @jaycode 是的,这是 MySQL Brew 问题。在这里回答:stackoverflow.com/questions/27617343/…
      • @maxgalbu 好点。 Docker 改变了他们的建议,所以我编辑了我的答案。请注意,它现在取决于知道具有 IP 地址的网络设备的名称。
      【解决方案3】:

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

      这个 repo 由一个 Web 服务器、数据库服务器和一个用于加载 MySQL 数据库的数据容器组成。

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

      Docker Repo on GitHub

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-07-03
          • 2020-11-14
          • 2017-10-07
          • 1970-01-01
          • 2018-08-07
          • 2020-02-29
          • 1970-01-01
          • 2019-01-25
          • 2011-09-25
          相关资源
          最近更新 更多