从Docker容器访问主机作为localhost,该容器也位于boot2docker vm中

Pau*_*Lam 35 docker boot2docker

假设我在OSX上的端口8000上运行了一个服务器.我的Docker容器如何通过它访问它localhost:8000?我也无法更改主机名,因为容器中的应用程序不在我的控制范围内.

我已经阅读了之前关于使用--net="host"容器访问主机网络的讨论.但是,我在OSX和Docker在VM中运行,所以来自Docker容器的localhost--net="host"转到VM而不是我的真机.

然后我尝试了端口转发解决方法:VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8000,tcp,,8000,,8000";无济于事.

任何建议将不胜感激.

laj*_*rre 47

感谢palimpestor的回答,我想通了:

而不是--net="host",使用--add-host="localhost:10.0.2.2"

确实:

  • 10.0.2.2是在NAT模式下为访客网络接口定义的默认网关(参考).
    阅读:从boot2docker看,它是你的主机.
  • --add-host...localhost 10.0.2.2在/ etc/hosts中添加(引用)

注意:您需要在boot2docker VM VirtualBox设置中设置NAT适配器(我是通过GUI完成的,不知道CLI).

  • 最后.`10.0.2.2`是神奇的答案!! (3认同)

pal*_*tor 14

而不是运行--net="host",尝试--add-host="localhost:192.168.59.3",这是boot2docker主机IP.

  • 在boot2docker初始化期间,boot2docker设置两个网络适配器,一个使用NAT,另一个使用"仅主机"适配器.该主机网络上的主机IP由virtualbox确定.您可以通过在主机上运行`ifconfig`并查看`vboxnet0`接口来检查它.默认情况下它是192.168.59.3,但您可以在首选项 - >网络 - >仅限主机网络的虚拟机全局设置中更改它.我能够在boot2docker VM中和正在运行的docker容器中ping该IP. (4认同)

小智 5

如果我理解您的意图,那就是:从容器连接到主机端口

从 18.3 开始,docker 团队已经为我们提供了:

我们的别名host.docker.internal

我想从容器连接到主机上的服务 主机的 IP 地址不断变化(如果您没有网络访问权限,则没有 IP 地址)。从 18.03 开始​​,我们建议连接到特殊的 DNS 名称host.docker.internal,该名称解析为主机使用的内部 IP 地址。这是出于开发目的,不适用于 Windows 版 Docker Desktop 之外的生产环境。

网关也可通过以下方式访问gateway.docker.internal

https://docs.docker.com/docker-for-windows/networking/