首页/云/云与容器速查/端口发布 -p 写法与暴露面控制
容器与 Docker106 条

端口发布 -p 写法与暴露面控制

掌握 -p 的各种写法并控制监听地址:默认绑定 0.0.0.0 全网络,内网服务应写成 127.0.0.1:宿主端口:容器端口,避免数据库、管理后台公网裸奔。

云与容器速查云更新于 2026-10-13

端口发布是什么

端口发布是 docker run 时通过 -p 把容器端口暴露到宿主机的机制,写法是宿主地址、宿主端口与容器端口的组合。关键点在于默认绑定全网卡:不写绑定地址时容器端口会监听在 0.0.0.0 上,只要宿主网络可达就能连上,所以内网服务应显式绑定回环地址或指定内网网卡,避免数据库与管理后台直接对公网开放。

基本信息

格式[-p 绑定地址:]宿主端口:容器端口[/协议]
随机宿主端口只写容器端口时,宿主侧会分配一个高位随机端口
仅本机访问写成 127.0.0.1 加端口的形式,只有宿主回环地址可连
指定网卡绑定某个内网地址,让服务只在特定网络可达
协议默认 TCP,需要 UDP 时显式声明,如 53 端口的 UDP
查看映射用 docker port 或 inspect 查看实际映射结果

典型使用场景

  • 对外提供 Web 服务:把宿主的 80 或 443 映射到容器内应用端口
  • 内网数据库:映射时绑定回环地址,只允许本机或经隧道访问
  • 多实例共存:同一镜像起多个容器,用不同宿主端口区分
  • 临时调试:只写容器端口让宿主随机分配,用完即删
  • UDP 服务:为域名解析、日志采集这类服务显式声明协议
  • 限制暴露范围:绑定在内网网卡上,公网网卡完全不监听

常见写法与含义

写法含义风险提示
-p 8080:80宿主全部网卡的 8080 映射到容器 80默认全网监听,需配合防火墙
-p 127.0.0.1:3306:3306只有宿主本机可连数据库推荐的内网服务写法
-p 10.0.0.5:8080:80只绑定指定内网地址多网卡主机的常见选择
-p 80宿主随机高位端口映射容器 80重启后端口可能变化
-p 53:53/udp显式声明 UDP 协议漏写协议时按 TCP 处理,服务不可用

使用示例

使用示例
docker run -d -p 127.0.0.1:3306:3306 --name db mysql:8.0    # 数据库只对宿主开放
docker run -d -p 8080:80 --name web nginx:1.27               # Web 服务对外
docker port web                                              # 查看实际映射
docker inspect -f "{{json .NetworkSettings.Ports}}" web      # 核对监听地址
ss -lntp | grep 8080                                         # 在宿主侧确认监听
默认的端口发布等于监听全部网卡:安全组或宿主防火墙一旦漏配,数据库与管理端口就是公网未授权访问,属于高频事故点。
端口发布与容器内监听的地址是两件事:容器内应用只监听回环地址时,即使做了端口映射也无法从外部访问。
随机宿主端口适合临时验证,不适合长期服务:容器重建后端口可能变化,防火墙规则与前端配置都要跟着改。
排查端口不通要分三层看:容器内是否监听、宿主是否映射成功、网络策略是否放行,三层都对才通。

暴露面收敛的做法

  • 内网服务统一绑定回环地址,需要外部访问时经反向代理转发
  • 只在必要时使用固定宿主端口,随机端口会带来配置漂移
  • 把端口映射清单纳入例行审计,定期核对公网可达的服务
  • 同一宿主承载多实例时用命名规范区分端口用途
  • 容器内应用监听地址要与映射方式匹配,否则映射成功也访问不到
  • 排查不通时按容器内监听、宿主映射、网络策略三层依次确认
宿主端口与容器端口很容易混淆:排障时先确认映射方向,再看容器内是否监听对应端口,顺序对了能少走一遍弯路。

易错点

  • 只在安全组里拦端口,容器仍监听全部网卡,内网横向仍可直达
  • 用随机宿主端口上线,重启后端口变化导致配置失配
  • 把宿主端口与容器端口写反,映射成功但访问不到服务
  • UDP 服务忘记声明协议,端口映射按 TCP 处理,服务直接不可用
  • 把管理后台或数据库直接映射到公网地址,靠密码单独防护

数据来源与参考

  • Docker Docs:Port publishing and mapping

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌