zoukankan      html  css  js  c++  java
  • Docker端口映射

     

    为什么要端口映射?

    在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因为没有端口。

    端口映射的指令是什么?

    docker指令:docker run  -p  ip:hostPort:containerPort  redis

    使用-p参数  会分配宿主机的端口映射到虚拟机。 

    IP表示主机的IP地址。
    ​ 
    hostPort表示宿主机的端口。
    ​ 
    containerPort表示虚拟机的端口。

    支持的格式有三种:

    ip:hostPort:containerPort:映射指定地址的指定端口到虚拟机的指定端口(不常用) 

    如:127.0.0.1:3306:3306,映射本机的3306端口到虚拟机的3306端口。 

    ip::containerPort:映射指定地址的任意端口到虚拟机的指定端口。(不常用) 

    如:127.0.0.1::3306,映射本机的3306端口到虚拟机的3306端口。 

    hostPort:containerPort:映射本机的指定端口到虚拟机的指定端口。(常用) 

    如:3306:3306,映射本机的3306端口到虚拟机的3306端口。

    如何查看是否映射成功?

    使用docker ps命令查看


    出现6379/tcp的表示宿主机并没有打开与虚拟机的端口映射。 

    出现0.0.0.0:3306->3306/tcp表示宿主机的3306端口映射到了虚拟机的3306端口。

    也可以使用docker port NAME查看端口映射情况。



    表示虚拟机的3306端口映射到了主机的3306端口。 
    如果没有任何回复,表示端口映射失败。


    5.1 自动映射端口

    -P使用时需要指定--expose选项,指定需要对外提供服务的端口

    $ sudo docker run -t -P --expose 22 --name server  ubuntu:14.04

    使用docker run -P自动绑定所有对外提供服务的容器端口,映射的端口将会从没有使用的端口池中 (49000..49900) 自动选择,

    ​你可以通过​docker ps、docker inspect <container_id>或者docker port <container_id> <port>确定具体的绑定信息。

    5.2 绑定端口到指定接口

    基本语法

    $ sudo docker run -p [([<host_interface>:[host_port]])|(<host_port>):]<container_port>[/udp] <image> <cmd>

    默认不指定绑定 ip 则监听所有网络接口。

     绑定 TCP 端口
    # Bind TCP port 8080 of the container to TCP port 80 on 127.0.0.1 of the host machine. 

    ​$ sudo docker run -p 127.0.0.1:80:8080 <image> <cmd> 

    ​# Bind TCP port 8080 of the container to a dynamically allocated TCP port on 127.0.0.1 of the host machine. 

    ​$ sudo docker run -p 127.0.0.1::8080 <image> <cmd> 

    ​# Bind TCP port 8080 of the container to TCP port 80 on all available interfaces of the host machine. 

    ​$ sudo docker run -p 80:8080 <image> <cmd> 

    ​# Bind TCP port 8080 of the container to a dynamically allocated TCP port on all available interfaces 

    ​$ sudo docker run -p 8080 <image> <cmd>

    绑定 UDP 端口
    # Bind UDP port 5353 of the container to UDP port 53 on 127.0.0.1 of the host machine. 


    ​$ sudo docker run -p 127.0.0.1:53:5353/udp <image> <cmd> 

    ​​

    1、单IP多容器映射规划方案

    主机名称

    ssh映射

    mysql映射

    nginx映射

    redis映射

    redis-test

    51000

    22

    51001

    3306

    51004

    80

    51002

    6379

    51005

    8000

    51003

    6381

    51006

    8888

       

    scheduler-test

    52000

    22

    52001

    3306

    52004

    80

    52002

    6379

    52005

    8888

    52003

    6381

    52006

    8000

       









    ​1.3 上述启动参数解释:


    -h  是指启动后容器中的主机名。


    --name 是宿主机上容器的名称,以后启动停止容器不必用容器ID,用名称即可,如docker stop redis-test。


    -d   以后台形式运行。


    -p   指定映射端口,如果需要映射UDP端口,则格式是 -p3000:3000/udp。


    debian02  是基础镜像名称。


    /etc/rc.local  是容器的启动命令,把多个启动脚本放/etc/rc.local中,方便多个程序随容器开机自启动。

    2、多IP多容器映射规划方案

    主机名称

    对外访问IP

    容器开放端口

    操作系统

    iframe-test

    10.18.103.2

    22 3306 80 8000 8888 443 6379   6381

    debian7

    web-test

    10.18.103.3

    22 3306 80 8000 8888 443 6379   6381

    debian7












































    ​​
  • 相关阅读:
    JS面向对象编程的实现
    初见Javascript
    详解promise
    radio单选按钮组操作
    cookie欺骗实战案例
    XSS攻击
    前端如何实现异步加载
    日常问题
    求1+2+...+n
    二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/williamjie/p/9915036.html
Copyright © 2011-2022 走看看