docker的`net = host`设置如何工作,我怎么能用例如: VirtualBox的?

时间:2014-08-06 21:42:52

标签: macos docker

Docker有一个运行选项net=host documented here,允许您运行与主机共享网络堆栈的虚拟机 - 例如,docker容器内的进程可以通过以下方式连接到主机localhost,反之亦然。

我想在Mac OS X上设置一个Linux VM来做同样的事情;我尝试过使用Vagrant及其各种网络设置而没有太多运气。

Docker的VM是否依赖主机和客户操作系统都是Linux,或者是否有某种方法可以完成这个OSX->我缺少的Linux?

2 个答案:

答案 0 :(得分:9)

感谢各位同事的帮助,我找到了解决这个问题的方法。此解决方案适用于boot2docker / VirtualBox。我刚用boot2docker init创建了我的docker VM,我没有对VM配置进行任何特定的更改。

首先使用--net=host运行docker镜像,以便它与主机VM共享网络,例如

docker run -it --net=host ubuntu bash

然后,您需要从用于docker容器的VM中找到IP地址,您可以通过运行boot2docker ssh OSX主机来执行此操作。 然后,您可以通过查找其网关来找到VM的IP地址:

$ netstat -rn | grep UG | awk '{print $2}'
10.0.2.2

所以在我的情况下它是10.0.2.2。您现在可以使用此IP地址访问主机上打开的端口,即从Docker容器在OSX上运行的程序。

要自动化,您可以先找到IP地址,然后将其作为环境变量传递给docker命令......

答案 1 :(得分:5)

我找到了另一个有效的答案,我将在此分享,以便人们可以选择:)

首先,您需要弄清楚OSX主机上首选网络接口的IP地址是什么。以下shell命令为我做了这个:

synchronized (A.class) {
    // do something
}

在我的情况下打印出来:echo "show State:/Network/Global/IPv4" | scutil | grep PrimaryInterface | awk '{print $3}' | xargs ifconfig | grep inet | grep -v inet6 | awk '{print $2}'

然后您可以在docker中使用该地址,或者甚至更好地为此地址提供内部docker的主机名:

10.226.98.247

然后,您可以在Docker容器中使用相同的docker run -it --add-host dockerhost:10.226.98.247 ubuntu bash 主机名,无论您在哪个环境中启动容器......