在我的工作中,我与docker一起工作,而该选项的--net=host工作方式就像将docker容器端口转发到机器的超级按钮一样。这使我可以通过示例添加使用某些端口的艰苦任务:
--net=host
当我开始在Mac中使用Docker时,我遇到的第一个问题是:该选项--net=host不再起作用。我研究了一下,我理解了为什么这是不可能的(Mac中的Docker在自己的虚拟机上运行),而我的瞬时解决方案是使用该-p选项公开端口,但这对我来说增加了使用端口的更多任务的限制,因为我需要-p为我需要公开的每个端口运行显式命令。
-p
有人遇到同样的问题吗? 如何处理呢?
您的问题很可能是您使用的是dockertoolbox或dhingy / dlite或提供 成熟的linux VM的 其他任何东西,然后托管docker 在此VM中运行您的容器。当然,该VM在主机上拥有自己的网络堆栈和IP,这就是您的工具所遇到的问题。容器的裸露端口不是暴露在外OSX host localhost,而是暴露在外OSX Docker-VM-ip。
OSX host localhost
OSX Docker-VM-ip
优雅地解决这些问题
localhost
docker run -p 3306:3306 percona
osx-host-localhost
brew install mysql
您实际上并没有真正导出任何东西,而是希望它们可以从所有容器(OSX-host-localhost的所有端口)作为整体进行访问。
如果要 连接 到 容器中 的OSX主机上提供的端口,例如在xdebug会话期间,IDE 将在OSX-host-localhost 上的端口9000 上 侦听,运行FPM / PHP的容器应 连接 到此端口在Mac上为osx- localhost:9000,您需要执行以下操作:https : //gist.github.com/EugenMayer/3019516e5a3b3a01b6eac88190327e7c
因此,您创建了一个虚拟回送ip,因此您可以使用10.254.254.254:9000从不带容器的情况下访问OSX主机端口- 这是可移植的,并且基本上为您提供了像以前那样开发所需的一切
因此,您可以连接到在Mac上运行并尝试连接到localhost:port的应用程序的容器暴露端口
第二个相反,如果容器中的某些东西想要连接到主机上的端口。