1. 程式人生 > >Docker埠對映

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












































​​