Docker net=host 在此处记录了一个运行选项,允许您运行与主机共享网络堆栈的虚拟机 - 例如,docker容器内的进程可以通过连接到主机localhost,反之亦然.
我想在Mac OS X上设置一个Linux VM来做同样的事情; 我尝试过使用Vagrant及其各种网络设置而没有太多运气.
Docker的VM是否依赖主机和客户操作系统都是Linux,或者是否有某种方法可以实现我缺少的OSX-> Linux?
感谢各位同事的帮助,我找到了解决这个问题的方法.此解决方案适用于boot2docker/VirtualBox.我刚刚创建了我的docker VM boot2docker init,我没有对VM配置进行任何特定的更改.
首先运行docker镜像--net=host,以便它与主机VM共享网络,例如
docker run -it --net=host ubuntu bash
Run Code Online (Sandbox Code Playgroud)
然后,您需要从用于docker容器的VM中找到IP地址,您可以通过运行boot2docker sshOSX主机来执行此操作.然后,您可以通过查找其网关来查找VM的IP地址:
$ netstat -rn | grep UG | awk '{print $2}'
10.0.2.2
Run Code Online (Sandbox Code Playgroud)
所以在我的情况下它是10.0.2.2.您现在可以使用此IP地址访问主机上打开的端口,即从Docker容器在OSX上运行的程序.
要自动化,您可以先找到IP地址,然后将其作为环境变量传递给docker命令...
我找到了另一个有效的答案,我将在这里分享,以便人们可以选择:)
首先,您需要弄清楚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}'
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这打印出来: 10.226.98.247
然后你可以简单地在docker中使用该地址,或者甚至更好地为这个地址提供docker内部的主机名:
docker run -it --add-host dockerhost:10.226.98.247 ubuntu bash
Run Code Online (Sandbox Code Playgroud)
然后,dockerhost无论您在哪个环境中启动容器,都可以在docker容器中使用相同的主机名...
| 归档时间: |
|
| 查看次数: |
16031 次 |
| 最近记录: |