Docker有一个运行选项net=host
documented here,允许您运行与主机共享网络堆栈的虚拟机 - 例如,docker容器内的进程可以通过以下方式连接到主机localhost
,反之亦然。
我想在Mac OS X上设置一个Linux VM来做同样的事情;我尝试过使用Vagrant及其各种网络设置而没有太多运气。
Docker的VM是否依赖主机和客户操作系统都是Linux,或者是否有某种方法可以完成这个OSX->我缺少的Linux?
答案 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
主机名,无论您在哪个环境中启动容器......