小编典典

Docker:MacOSX将主机的端口暴露给主机

docker

在我的工作中,我与docker一起工作,而该选项的--net=host工作方式就像将docker容器端口转发到机器的超级按钮一样。这使我可以通过示例添加使用某些端口的艰苦任务:

  • 在9001端口为我的覆盖率报告提供帮助
  • 我的应用程序的本地部署版本在端口9000中提供
  • 手表实时重新加载端口35729
  • 对于单元测试运行器,请使用9876端口

当我开始在Mac中使用Docker时,我遇到的第一个问题是:该选项--net=host不再起作用。我研究了一下,我理解了为什么这是不可能的(Mac中的Docker在自己的虚拟机上运行),而我的瞬时解决方案是使用该-p选项公开端口,但这对我来说增加了使用端口的更多任务的限制,因为我需要-p为我需要公开的每个端口运行显式命令。

有人遇到同样的问题吗? 如何处理呢?


阅读 341

收藏
2020-06-17

共1个答案

小编典典

您的问题很可能是您使用的是dockertoolbox或dhingy / dlite或提供 成熟的linux VM的
其他任何东西,然后托管docker
在此VM中运行您的容器。当然,该VM在主机上拥有自己的网络堆栈和IP,这就是您的工具所遇到的问题。容器的裸露端口不是暴露在外OSX host localhost,而是暴露在外OSX Docker-VM-ip

优雅地解决这些问题

将端口localhost从容器公开到OSX

  1. 首先,使用/安装docker -for-mac https://docs.docker.com/engine/installation/mac/而不是dockertoolbox或其他工具。它基于特殊的xhyve堆栈,可重用主机网络堆栈
  2. 当您现在执行docker run -p 3306:3306 percona此操作时,它将在上绑定3306 osx-host-localhost,因此尝试附加到localhost:3306的所有其他osx工具都可以工作(非常有用),就像使用brew install mysql或类似方式安装mysql时已经习惯了它
  3. 如果您在使用docker容器的OSX上遇到代码共享性能问题,请检查http ://docker-sync.io-它与docker-for-mac兼容(提示:我对此有偏见)

将端口从OSX主机导出到容器

您实际上并没有真正导出任何东西,而是希望它们可以从所有容器(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的应用程序的容器暴露端口

第二个相反,如果容器中的某些东西想要连接到主机上的端口。

2020-06-17