Docker 入门到实战 之 端口映射

在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因为没有端口。
       容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。
       当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

端口映射通过-P和-p参数来实现

一、-P将容器内部开放的网络端口随机映射到宿主机的一个端口上;

二、-p指定要映射的端口,一个指定端口上只可以绑定一个容器;

 docker指令:docker run  -p  ip:hostPort:containerPort  镜像

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

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

映射三种支持的格式

1、映射所有接口地址

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

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

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

此时默认会绑定本地所有接口上的所有地址。

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

2、映射到指定地址的指定端口

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

如:将容器的6380端口映射到指定地址127.0.0.1的6380端口上:

3、映射到指定地址的任意端口

ip::containerPort:映射指定地址的任意端口到虚拟机的指定端口。(不常用) 
如:将容器的6381端口映射到127.0.0.1的任意端口上,本地主机会自动分配一个端口

注意:

  • 容器有自己的内部网络和 ip 地址(使用 docker inspect 可以获取所有的变量,Docker 还可以有一个可变的网络配置。)

  • -p 标记可以多次使用来绑定多个端口

映射结果查看

  • 使用docker ps命令查看


出现6379/tcp的表示宿主机并没有打开与虚拟机的端口映射。 
出现0.0.0.0:3306->3306/tcp表示宿主机的3306端口映射到了虚拟机的3306端口。

  • 使用docker port NAME查看端口映射情况

使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址


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

 

自动映射端口

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

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>确定具体的绑定信息。

 

绑定端口到指定接口

基本语法

$ 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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值