Mac使用Docker-machine访问docker publish port-阿里云开发者社区

开发者社区> benjaminwhx> 正文

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,不然只有本机能够进行访问。


本文参考:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ExcelReport使用
目录一、使用ExcelReport导出Excel二、ExcelReport源码解析三、扩展元素格式化器 ExcelReport的作者长久未对文档进行更新,后续对文章进行更新,并对源码进行解析。
1159 0
优秀教程:使用 CSS3 动画实现的超炫的过渡特效
  Codrops 最近分享了一些很酷的图片切换灵感。有三种不同的用例:小的图像幻灯片,大标题幻灯片以及使用透明背景的产品幻灯片。状态转换使用 CSS 动画完成,我们能够定义从任何方向进来的图片的行为。
808 0
Kafka——使用java api进行pub &amp; sub
       之前用过老的api,但是最近在写消费的时候,发现之前老的api很多方法都out了,又去官网看了下最新的0.10.x的api. 1,producer org.apache.
888 0
使用Docker构建服务
使用Docker构建服务
1185 0
Mac下终端使用密钥登录服务器
可行方法: mac终端输入 ssh-keygen 因为mac系统是类unix系统,linux系统是unix系统演变来的,所以呢,相当于在一个linux系统登录另外一个linux系统, 基本命令还是一样的。
2697 0
使用Portainer或者UI for Docker可视化管理你的树莓派容器
本文讲的是使用Portainer或者UI for Docker可视化管理你的树莓派容器【编者的话】Stefan Scherer是Docker海盗船长,微软MVP。专注于Docker技术在ARM体系中应用。
4147 0
C#线程访问winform窗体控件
参考地址:http://www.cnblogs.com/jason-liu-blogs/archive/2012/09/08/2677008.html 添加: public Form() { InitializeComponent(); Control.
590 0
帆软FineReport如何使用程序数据集
大多数情况下,FineReport直接在设计器里使用“数据集查询”,直接写SQL就能满足报表要求,但对于一些复杂的报表,有时候SQL处理并不方便,这时可以把查询结果在应用层做一些预处理后,再传递给报表,即所谓的“程序数据集”,FineReport的帮助文档上给了一个示例: 1 package com.
1509 0
+关注
194
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载