[英]Docker: MacOSX Expose Container ports to host machine
在我的工作中,我使用--net=host
和选项--net=host
就像一个将--net=host
容器端口转发到机器的魅力。 这允许我通过示例添加使用某些端口的grunt任务:
当我开始在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
。
优雅地解决这些问题
localhost
docker run -p 3306:3306 percona
它会绑定osx-host-localhost
上的3306,因此每个其他尝试连接到localhost:3306的osx工具都会工作(非常有用)就像你习惯了当你使用brew install mysql
或者同样brew install mysql
你并没有特别地导出任何东西,而是让它们作为一个整体从所有容器(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
我有两个解决方案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.