Docker 的端口映射(Port Mapping)是一个关键功能,主要用于解决 容器内外网络隔离 和 服务访问 的问题。以下是详细原因和场景分析:
172.17.0.0/16
)。80
端口,但外部无法直接访问)。-p 8080:80
)将宿主机的 8080
端口与容器的 80
端口绑定,使得外部请求可以通过宿主机的 8080
访问容器服务。80
端口),直接暴露会导致端口冲突。-p 8080:80
、-p 8081:80
)实现多容器服务共存。80
端口,而非开放所有容器端口)。localhost:8080
,而生产环境通过 -p 80:80
绑定到宿主机真实网卡。80
),外部通过不同宿主机端口访问。# 将宿主机的8080端口映射到容器的80端口
docker run -d -p 8080:80 nginx
# 绑定到宿主机特定IP
docker run -d -p 192.168.1.100:8080:80 nginx
# 随机映射宿主机端口(宿主机端口由Docker分配)
docker run -d -p 80 nginx
docker port <container_id> # 查看实际映射的端口
Host 网络模式:
docker run --network=host nginx # 容器直接使用宿主机网络,无隔离性
Docker Network:
通过自定义网络(如 docker network create
)实现容器间直接通信(通过容器名或别名),但外部仍需端口映射访问。
场景 | 是否需要端口映射 |
---|---|
外部访问容器服务 | ✅ 必须 |
容器间通信(同网络) | ❌ 不需要(直接用容器名) |
宿主机直接访问容器 | ✅ 必须 |
避免端口冲突 | ✅ 通过不同宿主机端口映射 |
端口映射是 Docker 网络模型的核心设计之一,平衡了隔离性与可用性。理解其原理后,可以更灵活地设计容器化应用的网络架构。