我有一个Nginx在码头集装箱里运行。我在主机系统上运行了MySql。我想从我的容器中连接到MySql。MySql仅绑定到本地主机设备。
是否有任何方法可以从这个docker容器连接到这个MySql或本地主机上的任何其他程序?
这个问题与“如何从docker容器中获取docker主机的IP地址”不同,因为docker主机IP地址可以是网络中的公共IP或私有IP,而这些IP可能在docker容器内无法访问(如果托管在AWS或其他地方,我指的是公共IP)。即使你有docker主机的IP地址,这并不意味着你可以从容器内连接到docker主机,因为你的docker网络可能是overlay、host、bridge、macvlan、none等,这限制了该IP地址的可达性。
Windows 10解决方案
Docker社区版17.06.0-ce-2018 2017-06-28(稳定)
您可以使用主机docker.for.win.localhost的DNS名称解析为内部IP。(警告一些消息来源提到了窗口,但应该是赢家)
概述我需要做类似的事情,即从Docker容器连接到运行Azure Storage Emulator和CosmosDB Emulator的本地主机。
Azure Storage Emulator默认监听127.0.0.1,虽然您也可以更改IP的绑定,但我正在寻找一个可以使用默认设置的解决方案。
这也适用于从Docker容器连接到SQL Server和IIS,两者都在我的主机上以默认端口设置本地运行。
Windows 10解决方案
Docker社区版17.06.0-ce-2018 2017-06-28(稳定)
您可以使用主机docker.for.win.localhost的DNS名称解析为内部IP。(警告一些消息来源提到了窗口,但应该是赢家)
概述我需要做类似的事情,即从Docker容器连接到运行Azure Storage Emulator和CosmosDB Emulator的本地主机。
Azure Storage Emulator默认监听127.0.0.1,虽然您也可以更改IP的绑定,但我正在寻找一个可以使用默认设置的解决方案。
这也适用于从Docker容器连接到SQL Server和IIS,两者都在我的主机上以默认端口设置本地运行。
在7年的时间里,人们提出了一个问题,要么码头工人变了,要么没有人这样做。因此,我将包括我自己的答案。
我发现所有的答案都使用复杂的方法。今天,我需要这个,并找到了两个非常简单的方法:
在主机上使用ipconfig或ifconfig,并记下所有IP地址。容器至少可以使用其中两个。我在WiFi LAN适配器上有一个固定的本地网络地址:192.168.1.101。这可能是10.0.101。结果会因路由器而异我在windows上使用WSL,它有自己的vEthernet地址:172.19.192.1使用host.docker.internal。根据操作系统的不同,大多数答案都有这种或另一种形式。这个名字表明它现在被docker全球使用。
第三种选择是使用计算机的WAN地址,或者换句话说,使用服务提供商提供的IP地址。然而,如果IP不是静态的,并且需要路由和防火墙设置,则这可能不起作用。