繁体   English   中英

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

[英]Docker: MacOSX Expose Container ports to host machine

在我的工作中,我使用--net=host和选项--net=host就像一个将--net=host容器端口转发到机器的魅力。 这允许我通过示例添加使用某些端口的grunt任务:

  • A在9001港口提供我的承保报告
  • 我的应用程序的本地部署版本在端口9000中提供
  • 手表正在重新加载35729端口
  • 对于单元测试跑步者,请使用9876端口

当我开始在Mac中使用Docker时,我遇到的第一个问题是:选项--net=host不再起作用了。 我研究并且我理解为什么这是不可能的(Mac中的Docker在自己的虚拟机中运行)和我的瞬间解决方案它使用-p选项来暴露端口,但这限制了我添加越来越多使用端口的任务因为我需要为每个需要公开的端口运行explicit -p命令。

有同样问题的人吗? 怎么处理这个?

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

优雅地解决这些问题

从容器中将端口暴露给OSX localhost

  1. 首先,使用/ install docker-for-mac https://docs.docker.com/engine/installation/mac/而不是dockertoolbox或其他。 它基于一个特殊的xhyve堆栈,它重用你的主机网络堆栈
  2. 当你现在做docker run -p 3306:3306 percona它会绑定osx-host-localhost上的3306,因此每个其他尝试连接到localhost:3306的osx工具都会工作(非常有用)就像你习惯了当你使用brew install mysql或者同样brew install mysql
  3. 如果您在使用docker容器的OSX上遇到代码共享的性能问题,请检查http://docker-sync.io - 它与docker-for-mac兼容(提示:我对此有偏见)

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

你并没有特别地导出任何东西,而是让它们作为一个整体从所有容器(OSX-host-localhost的所有端口)访问它们

如果要连接到OSX主机上提供的端口,请在容器内 ,例如在xdebug会话期间,IDE会侦听OSX-host-localhost上的端口9000 并且运行FPM / PHP的容器应附加到此端口osx-localhost:在mac上9000,你需要这样做: https//gist.github.com/EugenMayer/3019516e5a3b3a01b6eac88190327e7c

因此,您创建了一个虚拟环回ip,因此您可以使用10.254.254.254:9000从无容器访问您的OSX主机端口 - 这是可移植的,基本上为您提供了所需的一切,就像您以前一样开发


因此,为您提供与容器公开端口的连接,以便在mac上运行的应用程序并尝试连接到localhost:port

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

“将容器端口绑定到主机 ”中提到的一种解决方法是使用-P

(或--publish-all=true|false )到--publish-all=true|false docker run ,这是一个一揽子操作,用于在图像的Dockerfile中标识EXPOSE行的每个端口或--expose <port>命令行标志并将其映射到某个位置的主机端口短暂的港口范围。
然后需要使用docker port命令检查创建的映射。

因此,如果您的应用程序可以使用docker port <CONTAINER>来检索映射端口,您可以根据需要添加任意数量的容器并以此方式获取映射端口(无需为每个端口提供“explicit -p命令”)。

不确定docker for mac是否可以支持以后的双向连接https://forums.docker.com/t/will-docker-for-mac-support-bi-directional-connection-between-host-and-container-in -the-未来/ 19871

我有两个解决方案:

  1. 您可以编写一个简单的包装器脚本,并将要公开的端口传递给脚本
  2. 使用vagrant启动受控网络的虚拟机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM