docker的“net = host”设置是如何工作的,我怎么能像VirtualBox那样做一些类似的事情?

Docker有一个在这里logging的运行选项net=host ,允许你运行一个与主机共享networking堆栈的虚拟机 – 例如,docker容器内的进程可以通过localhost主机连接到主机,反之亦然。

我想在Mac OS X上build立一个Linux VM来做同样的事情; 我试过使用stream浪汉和它的各种networking设置没有太多的运气。

Docker的虚拟机是否依赖于主机和客户机操作系统都是Linux,还是有一些方法可以完成这个我错过的OSX-> Linux?

感谢我的同事们的帮助,我find了解决这个问题的办法。 这个解决scheme适用于boot2docker / VirtualBox。 我刚刚使用boot2docker init创build了boot2docker init虚拟机,但没有对虚拟机configuration进行任何特定的更改。

首先你运行--net=host镜像--net=host ,这样它就可以和主机虚拟机共享networking

 docker run -it --net=host ubuntu bash 

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

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

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

要实现自动化,您可以先findIP地址,然后将其作为环境variables传递到docker命令中。

我find了另一个可行的答案,我将在这里分享,以便人们可以select:)

首先,您需要确定OSX主机上首选networking接口的IP地址是什么。 下面的shell命令为我做了这个:

 echo "show State:/Network/Global/IPv4" | scutil | grep PrimaryInterface | awk '{print $3}' | xargs ifconfig | grep inet | grep -v inet6 | awk '{print $2}' 

在我的情况下,这打印出来: 10.226.98.247

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

 docker run -it --add-host dockerhost:10.226.98.247 ubuntu bash 

然后,您可以在您的泊坞窗容器中使用相同的dockerhost主机名,无论您在哪个环境中启动您的容器…