Step 1、Export the port in your container(docker-machine or boot2docker)

首先,要保证你公布port的image已经run起来了。假设你是通过Dockerfile build起来的image。注意在image里面加上以下的一段话:

  1. Expose 80

假设你须要公布其它port,仅仅需把80改变就可以。

Expose这个命令的意思是docker image公布一个port。

然后你须要将基于这个容器的image指定一个port去绑定:

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

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

假设你不想在你的mac或者windows上通过http://localhost:80的方式去訪问,到这就能够结束了。

你能够通过你docker-machine或者boot2docker的ip去訪问。

  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的80port到boot2docker/docker-machine VM的80port:

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

或者你能够设置VirtualBox的參数来进行port转发:

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

假设你的VM还在running,你须要执行下面命令:

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

如今你能够通过localhost:80去訪问了。

假设你有非常多容器公布同一个port,你有必要使用docker的动态转发

For example, running 3 nginx containers:

  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命令转发49XXXport。

这样的方法能够非常easy做到同一时候转发。


  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

假设须要删除公布的port,能够这么做:


  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有效,假设想让外部訪问。必须在启动命令后面加上

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



这样就绑定了全部ip,不然仅仅有本机可以进行訪问。




本文參考:

Mac使用Docker-machine訪问docker publish port的更多相关文章

  1. Docker Machine批量安装docker host

    Dokcer Machine Docker Machine 可以批量安装和配置 docker host   提高docker的安装效率   同时减少人工安装操作的失误 [root@localhost ...

  2. 2.docker machine 创建 包含 docker 的 linux 虚拟机

    1. 启动 从https://github.com/boot2docker/boot2docker/releases下载iso到~/.docker/machine/cache/里 docker-mac ...

  3. Docker Machine

    Docker Machine http://dockone.io/article/1485?utm_source=tuicool&utm_medium=referral 本地安装与使用 Doc ...

  4. Docker三剑客之Docker Machine

    一.什么是Docker Machine Docker Machine 是Docker官方编排项目之一,使用go语言编写的,使用不同引擎在多种平台上快速的安装Docker环境,开源地址:https:// ...

  5. Docker Machine 详解

    笔者在<Docker Machine 简介>一文中简单介绍了 Docker Machine 及其基本用法,但是忽略的细节实在是太多了.比如 Docker 与 Docker Machine ...

  6. 安装 Docker Machine - 每天5分钟玩转 Docker 容器技术(45)

    前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和销毁,相关容器会通过网络 ...

  7. Docker教程:docker machine的配置和命令

    http://blog.csdn.net/pipisorry/article/details/50921335 安装virtualbox 如果要使用virtualbox,首先要安装virtualbox ...

  8. 第 7 章 多主机管理 - 045 - 安装 Docker Machine

    安装 Docker Machine 先安装docker 官方安装docker-machine的文档地址:https://docs.docker.com/machine/install-machine/ ...

  9. Docker Machine 和 Docker Engine 的区别

    Docker Engine 当人们提到 Docker,一般而言,大家说的是 Docker Engine,如下图:  它是一个 client-server application. Docker Eng ...

随机推荐

  1. 移动端开发ios和安卓兼容问题

    移动端开发ios和安卓兼容问题 最近做移动端混合开的时候遇到一些安卓和iOS的兼容性问题,兼容想问题不仅在浏览器存在也在APP开发当中也会经常遇到这样的情况. 最近看了一下内容很不错的移动端开发相关的 ...

  2. java音乐播放之IO流处理

    这个类仅仅能一直播放.知道音乐结束. 比AudioCilp要好一点. import java.io.*; import javax.sound.sampled.*; public class Test ...

  3. POJ 1887 Testingthe CATCHER (LIS:最长下降子序列)

    POJ 1887Testingthe CATCHER (LIS:最长下降子序列) http://poj.org/problem?id=3903 题意: 给你一个长度为n (n<=200000) ...

  4. 3.AngularJS-过滤器

    转自:https://www.cnblogs.com/best/p/6225621.html 二.过滤器 使用过滤器格式化数据,变换数据格式,在模板中使用一个插值变量.语法格式如下: {{ expre ...

  5. Quart 学习

    quartz版本使用2.2.1 梳理一下其中的流程,可以表示为: 0.调度器线程run() 1.获取待触发trigger 1.1数据库LOCKS表TRIGGER_ACCESS行加锁 1.2读取JobD ...

  6. 手动新建hive编程环境(以hive-1.0.0和hive-1.2.1为例)

    如下,是用maven构建项目,本篇博文重点不是这个.初学者(小白)变成小鸟后,建议开始用maven啦! Eclipse下Maven新建项目.自动打依赖jar包(包含普通项目和Web项目) HBase ...

  7. jquery常规选择器再学习_1123

    jquery选择器基本模拟css语法来获取元素: 1 常规选择器 id 常见的元素标签 class 2 进阶选择器 组合选择器 常规选择器多个组合在一起 通配符选择器 * ,通常用于局部环境下 后代选 ...

  8. 今日SGU 5.20

    SGU 404 题意:.. 收获:取模 #include<bits/stdc++.h> #define de(x) cout<<#x<<"="& ...

  9. POJ——T 3067 Japan

    http://poj.org/problem?id=3067 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29474   ...

  10. Python学习笔记3:简单文件操作

    # -*- coding: cp936 -*- # 1 打开文件 # open(fileName, mode) # 參数:fileName文件名称 # mode打开方式 # w     以写方式打开. ...