容器端口映射
理解端口映射的作用与原理
掌握两种端口映射方式
能独立配置多端口映射
核心讲解
(1)为什么需要端口映射
容器有自己独立的网络命名空间,有自己的 IP 和端口。外部网络直接访问不到容器内部的端口,需要把宿主机的端口映射到容器的端口上,这样访问宿主机的端口,就等于访问容器里的端口。
(2)两种映射方式
表格
方式 | 命令 | 特点 | 适用场景 |
|---|---|---|---|
指定映射 |
| 精确指定宿主机端口,固定不变 | 生产环境、固定服务 |
随机映射 |
| 宿主机随机分配高端口 | 测试、临时容器 |
(3)进阶规则
指定 IP:
-p 127.0.0.1:80:80,只允许本机访问,更安全指定协议:
-p 53:53/udp,默认是 TCP,UDP 要指定多端口映射:多个
-p参数,比如-p 80:80 -p 443:443
(4)原理
Docker 通过 iptables 做 NAT 转发,把宿主机端口的流量转发到容器对应的端口上。
操作示例
# ===== 1. 指定端口映射 =====
# 宿主机8080端口映射容器80端口
docker run -d --name nginx1 -p 8080:80 nginx
# 验证:浏览器访问 宿主机IP:8080 就能看到nginx页面
# 或者curl验证
curl localhost:8080
# ===== 2. 多端口映射 =====
docker run -d --name nginx2 \
-p 80:80 \
-p 443:443 \
nginx
# ===== 3. 随机端口映射 =====
docker run -d --name nginx3 -P nginx
# 查看映射的端口
docker ps
# PORTS列会显示 0.0.0.0:32768->80/tcp
# 32768就是随机分配的宿主机端口
# ===== 4. 绑定本机IP(只允许本机访问) =====
docker run -d --name nginx4 -p 127.0.0.1:8081:80 nginx
# 只有本机才能访问,外部机器访问不了
常见误区
端口写反:宿主端口在前,容器端口在后,很多人容易写反
端口冲突:宿主机端口已经被占用的话,容器会启动失败,换个端口就行
UDP 端口没指定:默认都是 TCP,UDP 服务必须加 /udp
防火墙没开端口:云服务器要在安全组开放对应的宿主机端口,否则外部访问不到
课后练习
启动一个 nginx 容器,映射宿主机 8090 端口
用 curl 访问验证是否成功
启动第二个容器,用随机端口映射,查看分配的端口
思考:为什么生产环境一般不用随机端口映射?

