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
主机名,无论您在哪个环境中启动您的容器…