首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >docker的`net=host`设置是如何工作的,我怎样才能用VirtualBox做类似的事情?

docker的`net=host`设置是如何工作的,我怎样才能用VirtualBox做类似的事情?
EN

Stack Overflow用户
提问于 2014-08-07 05:42:52
回答 2查看 16.8K关注 0票数 18

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

我想在Mac上设置一个Linux VM来做同样的事情;我已经尝试使用Vagrant和它的各种网络设置,但没有成功。

Docker的虚拟机是否依赖于主机和来宾OSes都是Linux,或者有什么方法可以实现我所缺少的OSX->Linux?

EN

回答 2

Stack Overflow用户

发布于 2015-05-29 00:07:04

多亏了同事的帮助,我找到了解决这个问题的办法。此解决方案适用于boot2docker/VirtualBox。我刚刚用boot2docker init创建了我的docker VM,我没有对VM配置做任何具体的更改。

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

代码语言:javascript
复制
docker run -it --net=host ubuntu bash

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

代码语言:javascript
复制
$ netstat -rn | grep UG | awk '{print $2}'
10.0.2.2

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

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

票数 9
EN

Stack Overflow用户

发布于 2015-05-29 03:28:13

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

首先,您需要找出OSX主机上首选网络接口的IP地址是什么。下面的shell命令为我做了这件事:

代码语言:javascript
复制
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的主机名:

代码语言:javascript
复制
docker run -it --add-host dockerhost:10.226.98.247 ubuntu bash

然后,无论您在什么环境中启动容器,都可以在docker容器中使用相同的dockerhost主机名……

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25170738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档