天天看點

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 52001 52004 52002
52005 52003
52006

​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