Docker有一个运行选项net=host
documented here,它允许您运行与主机- for共享网络堆栈的虚拟机。例如,docker容器内的进程可以通过localhost
连接到主机,反之亦然。
我想在Mac上设置一个Linux VM来做同样的事情;我已经尝试使用Vagrant和它的各种网络设置,但没有成功。
Docker的虚拟机是否依赖于主机和来宾OSes都是Linux,或者有什么方法可以实现我所缺少的OSX->Linux?
发布于 2015-05-29 00:07:04
多亏了同事的帮助,我找到了解决这个问题的办法。此解决方案适用于boot2docker/VirtualBox。我刚刚用boot2docker init
创建了我的docker VM,我没有对VM配置做任何具体的更改。
首先,您使用--net=host
运行docker映像,以便它与主机VM共享网络。
docker run -it --net=host ubuntu bash
然后,您需要从用于docker容器的VM中查找IP地址,您可以通过运行boot2docker ssh
来完成此操作。然后,您可以通过查找其网关来查找虚拟机的IP地址:
$ netstat -rn | grep UG | awk '{print $2}'
10.0.2.2
所以在我的例子中是10.0.2.2。现在,您可以使用此IP地址从docker容器访问主机上打开的端口,即在OSX上运行的程序上。
要实现自动化,您可以首先找到IP地址,然后将其作为环境变量传递给docker命令……
发布于 2015-05-29 03:28:13
我找到了另一个有效的答案,我将在这里分享它,以便人们可以选择:)
首先,您需要找出OSX主机上首选网络接口的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
然后,无论您在什么环境中启动容器,都可以在docker容器中使用相同的dockerhost
主机名……
https://stackoverflow.com/questions/25170738
复制相似问题