docker端口映射详解(随机端口、指定IP端口、随意ip指定端口、指定ip随机端口)
目录
Local_Port:Container_Port,任意地址的指定端口
Local_IP:Local_Port:Container_Port 映射到指定地址的指定端口
Local_IP::Container_Port 映射到指定地址,但是宿主机端口是随机分配的
docker端口映射详解
一、端口映射概述:
端口映射(Port Mapping)是一种网络地址转换(NAT)技术,它将容器内部的网络端口与宿主机端口建立映射关系,使得外部请求能够通过宿主机的特定端口访问容器内的服务。
在Docker中容器默认是无法与外部通信的,需要在启动命令中加入对应的参数才允许容器与外界通信。
当Docker中运行一个Web服务时,需要把容器内的Web服务应用程序端口映射到本地宿主机的端口。这样,用户访问宿主机指定的端口的话,就相当于访问容器内部的Web服务端口。
核心要素:
- 宿主机IP地址
- 宿主机端口
- 容器IP地址(在Docker网络内)
- 容器端口
为什么需要端口映射
- 网络隔离:容器默认运行在隔离的网络环境
- 端口冲突:多个容器可能使用相同的默认服务端口
- 安全控制:精确控制哪些端口对外暴露
- 灵活配置:外部端口可与内部端口不同
端口映射工作原理
底层实现机制
Docker端口映射主要通过以下技术实现:
- iptables:Linux内核的包过滤系统
- netfilter:内核的网络过滤框架
- 用户空间代理:在某些情况下的备用方案
数据流详细过程
- 外部请求到达宿主机指定端口
- 内核检查iptables规则
- 匹配到DNAT(目标地址转换)规则
- 请求被转发到容器的虚拟网卡
- 容器处理请求并返回响应
- 响应经过反向地址转换后返回客户端
查看实际映射规则
- 可以通过以下命令查看Docker创建的iptables规则:
iptables -t nat -L -n
二、案例实验:
1、-P选项,随机端口
使用-P选项时Docker会随机映射一个端口至容器内部的开放端口
[root@docker ~]# docker run -d -P --name nginx-test1 nginx
使用docker port可以查看端口映射情况
[root@docker ~]# docker port nginx-test1

访问测试:192.168.100.131:32768

[root@docker ~]# docker logs nginx-test1

查看映射的随机端口范围
[root@docker ~]#
cat /proc/sys/net/ipv4/ip_local_port_range

2、使用-p可以指定要映射到的本地端口。
Local_Port:Container_Port,任意地址的指定端口
端口映射参数中指定了宿主机的8000映射到容器内部的80端口,可以多次使用-p选项
[root@docker ~]# docker run -d -p 8000:80 --name nginx-test2 nginx

访问测试:192.168.100.131:8000

这种方式会映射到所有接口地址,所有访客都可以通过宿主机所有IP的端口来访问容器。
如下:查看宿主机当前的ip地址

访问测试:192.168.59.153:8000

Local_IP:Local_Port:Container_Port 映射到指定地址的指定端口
[root@docker ~]# docker run -d -p
192.168.100.131:9000:80 --name nginx-test3 nginx

访问测试:192.168.100.131:9000

访问测试:192.168.59.153:9000

Local_IP::Container_Port 映射到指定地址,但是宿主机端口是随机分配的
[root@docker ~]# docker run -d -p 192.168.100.131::80 --name nginx-test4 nginx
[root@docker ~]# docker port nginx-test4

访问测试:192.168.100.131:32770

3、指定传输协议:TCP
[root@docker ~]# docker run -d -p 80:80/tcp --name nginx-test5 nginx
[root@docker ~]# docker port nginx-test5

访问测试:192.168.100.131:80

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)