為什么要端口映射?
在啟動容器時,如果不配置宿主機器與虛擬機的端口映射,外部程序是無法訪問虛擬機的,因為沒有端口。
端口映射的指令是什么?
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.3 上述啟動參數解釋:
-h 是指啟動后容器中的主機名。
--name 是宿主機上容器的名稱,以后啟動停止容器不必用容器ID,用名稱即可,如docker stop redis-test。
-d 以后台形式運行。
-p 指定映射端口,如果需要映射UDP端口,則格式是 -p3000:3000/udp。
debian02 是基礎鏡像名稱。
/etc/rc.local 是容器的啟動命令,把多個啟動腳本放/etc/rc.local中,方便多個程序隨容器開機自啟動。
在啟動容器時,如果不配置宿主機器與虛擬機的端口映射,外部程序是無法訪問虛擬機的,因為沒有端口。
端口映射的指令是什么?
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 |
