Mac使用Docker-machine访问docker publish port

Step 1、Export the port in your Container(Docker-machine or boot2docker)

首先,要保证你发布端口的image已经run起来了。如果你是通过Dockerfile build起来的image,注意在image里面加上下面的一段话:

[html] view plain copy

 print?

  1. Expose 80  

如果你需要发布其他端口,只需把80改变即可。

Expose这个命令的意思是docker image发布一个端口。

然后你需要将基于这个容器的image指定一个端口去绑定:

[html] view plain copy

 print?

  1. docker rum -p 80:80 -d YOUR_IMAGE  

-p选项的含义是把80端口绑定在主机的80端口(这里的“主机”指docker-machine或者boot2docker容器)

如果你不想在你的mac或者windows上通过http://localhost:80的方式去访问,到这就可以结束了。你可以通过你docker-machine或者boot2docker的ip去访问。

[html] view plain copy

 print?

  1. $docker-machine ip MACHINE_NAME  
  2. 192.168.99.100  

这里我就可以通过http://192.168.99.100:80去访问我发布的image

Step 2、Configure VirtualBox

大家都知道docker-machine和boot2docker本身是不能直接在mac或windows下运行的,它必须依附一个VM,这里的VM就是VirtualBox,如何让我们在本机访问docker里发布的应用,这里就需要打开VirtualBox的port forwarding。

运行以下命令通过ssh去转发OSX/Windows的80端口到boot2docker/docker-machine VM的80端口:

[html] view plain copy

 print?

  1. $ boot2docker ssh -vnNTL *:80:localhost:80  

或者你可以设置VirtualBox的参数来进行端口转发:

[html] view plain copy

 print?

  1. $ VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8000,tcp,,80,,80";  

如果你的VM还在running,你需要运行以下命令:

[html] view plain copy

 print?

  1. $ VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port8000,tcp,,80,,80";  

现在你可以通过localhost:80去访问了。

如果你有很多容器发布同一个端口,你有必要使用docker的动态转发

For example, running 3 nginx containers:

[html] view plain copy

 print?

  1. container-1 : 80 -> 49153 (i.e. docker run -p 49153:80 ...)  
  2. container-2 : 80 -> 49154 (i.e. docker run -p 49154:80 ...)  
  3. container-3 : 80 -> 49155 (i.e. docker run -p 49155:80 ...)  

使用VBoxManage modifyvm命令转发49XXX端口。这种方法可以很容易做到同时转发。

[html] view plain copy

 print?

  1. # vm must be powered off  
  2. for i in {49000..49900}; do  
  3.  VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port$i,tcp,,$i,,$i";  
  4.  VBoxManage modifyvm "boot2docker-vm" --natpf1 "udp-port$i,udp,,$i,,$i";  
  5. done  

如果需要删除发布的端口,可以这么做:

[html] view plain copy

 print?

  1. # vm must be powered off  
  2. for i in {49000..49900}; do  
  3.  VBoxManage modifyvm "boot2docker-vm" --natpf1 delete "tcp-port$i";  
  4.  VBoxManage modifyvm "boot2docker-vm" --natpf1 delete "udp-port$i";  
  5. done  

另发布jboss会发现外部无法访问,这是因为jboss应用只对localhost有效,如果想让外部访问,必须在启动命令后面加上

[html] view plain copy

 print?

  1. <strong><span style="font-size:24px;">-b 0.0.0.0</span></strong>  


这样就绑定了所有ip,不然只有本机能够进行访问。

本文参考:

https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

https://github.com/boot2docker/boot2docker/issues/976

https://fogstack.wordpress.com/2014/02/09/docker-on-osx-port-forwarding/

时间: 2024-10-04 07:03:25

Mac使用Docker-machine访问docker publish port的相关文章

Docker Machine快速安装Docker环境(二)

什么是Docker Machine? Machine是一个简化安装Docker环境的工具.怎么简化法,例如,在ubuntu安装一个docker环境要按照U这个系统配置教程来装,哪天又换了CentOS系统,又要按照这个系统配置教程装.市场上主流Linux系统版本很多,每次安装岂不有些麻烦.使用Machine工具就简单很多,一两条命令即可在主流Linux系统上安装Docker环境,用户不用考虑什么操作系统. 另一方面,Machine还具备Docker工具管理什么虚拟化技术,Generic驱动默认管理

如何使用Docker Machine创建Swarm集群

本文讲的是如何使用Docker Machine创建Swarm集群,[编者的话]之前,Docker的安装流程非常复杂,用户需要登录到相应的主机上,根据官方的安装和配置指南来安装Docker,并且不同的操作系统的安装步骤也是不一样的.而有了Machine后,不管是在笔记本.虚拟机还是公有云实例上,用户仅仅需要一个命令就轻松搞定安装.当然那你需要先安装Docker Machine.Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker

使用Compose和Machine来Docker化Flask:从本地到云端

本文讲的是使用Compose和Machine来Docker化Flask:从本地到云端,[编者的话]Docker 1.6发布了,Compose和Machine都在更新之列.本文具体说明了如何使用这两个组件来实现本地与云端的同步部署与管理. Docker是个强大工具,用于启动隔离的.可重复生产的应用环境容器.本文侧重讲述如何为本地开发容器化Flask应用,同时使用Docker Compose和Docker Machine将应用交付到云主机提供商中. 本地设置 与Docker(v1.6.0)一起,我们

微软扩展对 Docker 支持,支持 Docker Machine

微软正在努力确保 Azure 成为开发人员构建应用和运行服务最重要的解决方案.包括对 Windows 以及其他开源技术的支持,Azure 希望成为支持不同技术和设备的云平台. 之前微软宣布对 Docker 的支持,今天他们对这个支持进行了扩展,支持 Docker 最新发布的 Docker Machine 和 Docker Swarm . 这意味着: Docker Machine – Azure 客户可自动化创建 Docker 主机,并使用 Docker Machine 客户端进行管理 Docke

Docker Machine介绍

Docker Machine介绍 Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox. Digital Ocean.Microsoft Azure.Docker官方是这样介绍Machine的初衷的: 之前,Docker的安装流程非常复杂,用户需要登录到相应的主机上,根据官方的安装和配置指南来安装Docker,并且不同的操作系统的安装步骤也是不一样的.而有了Machine后,不管是在笔记本.虚拟机还是

【实战】Docker Machine + Compose + Swarm

本文讲的是[实战]Docker Machine + Compose + Swarm,[编者的话]本文的案例结合了Docker的三大编排工具Docker Machine.Compose与Swarm,值得读者们参阅. Docker现在已经推出了一些新的命令行工具,这些工具可以简单的编排(orchestration )Docker实例.集群以及容器管理.它们是: Docker Machine - 让你轻松部署Docker实例到很多不同的平台. Docker Compose - Fig工具的替代品. D

mac os x-Mac OS 下 Docker的配置问题

问题描述 Mac OS 下 Docker的配置问题 刚开始用docker , 按照官网 上面的说明,配置了一下,但是没配成功,求解答, 下面是我进行的步骤(操作系统:Mac os) 1.到官网去下了个 boot2docker,安装后,然后运行application 2. 然后它 自动执行了一些 command,比如innit 和 start bash unset DYLD_LIBRARY_PATH ; unset LD_LIBRARY_PATH mkdir -p ~/.boot2docker i

使用Docker Machine管理阿里云ECS

Docker Machine是一个docker管理工具,它解决了docker的两个问题: docker只能运行在Linux上 docker只能管理运行本机的docker镜像. 本质上docker-machine是一个虚拟机管理工具,它通过创建一个安装好docker的虚拟机(支持VirtualBox,DigitalOcean,EC2等),并设置对应的环境变量(DOCKER_HOST,DOCKER_MACHINE_NAME等),使得本地的docker工具获得透明远程操作虚拟机的能力.从而使本身不支持

如何在云服务提供商的平台上使用Docker Machine

大家好,今天我们来了解如何使用Docker Machine在各种云服务提供商的平台上部署Docker.Docker Machine是一个可以帮助我们在自己的电脑.云服务提供商的平台以及我们数据中心的机器上创建Docker机器的应用程序.它为创建服务器.在服务器中安装Docker.根据用户需求配置Docker客户端提供了简单的解决方案.驱动API对本地机器.数据中心的虚拟机或者公用云机器都适用.Docker Machine支持Windows.OSX和Linux,并且提供一个独立的二进制文件,可以直