目录

docker端口映射详解

一、端口映射概述:

二、案例实验:

1、-P选项,随机端口

2、使用-p可以指定要映射到的本地端口。

Local_Port:Container_Port,任意地址的指定端口

Local_IP:Local_Port:Container_Port  映射到指定地址的指定端口

Local_IP::Container_Port  映射到指定地址,但是宿主机端口是随机分配的

3、指定传输协议:TCP


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

Logo

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

更多推荐