首页/云/Docker 容器速查/compose ports 字段写法
Compose 编排55 条

compose ports 字段写法

端口映射的短语法与长语法:可为端口指定绑定 IP、协议与发布模式;与 docker run -p 的规则一致,写错则服务只在内网可达。

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

编排里的端口字段

在编排文件里声明端口映射,效果与运行命令的端口参数一致:把容器内监听的端口发布到宿主机。它支持简洁写法,也支持逐字段展开的写法,后者能明确指定监听地址与协议。写错时的后果往往不是报错,而是服务只在内网可达或对外暴露过宽。

基本信息

简洁写法用冒号连接宿主端口与容器端口,含冒号的值建议加引号
展开写法逐项声明容器端口、宿主端口、协议与监听地址
默认行为监听宿主全部地址,协议为传输控制协议
绑定地址可指定只监听回环地址,仅本机可访问
生效时机属于创建期配置,改动后需要重新拉起触发容器重建

典型使用场景

  • 对外发布服务:把 Web 服务端口映射到宿主的常规端口
  • 仅本机暴露:管理接口只绑定回环地址,配合隧道使用
  • 同一端口多服务:不同环境用不同宿主端口,避免冲突
  • 用户数据报协议服务:显式声明协议,避免默认协议不匹配
  • 区间映射:一个服务占用多个连续端口时按区间书写

常用写法

常用写法
services:
  web:
    image: nginx:1.27-alpine
    ports:
      - "8080:80"                 # 宿主 8080 到容器 80
      - "127.0.0.1:9000:9000"     # 仅本机可访问
      - "53:53/udp"               # 指定用户数据报协议
      - target: 8443              # 展开写法:容器端口
        published: "8443"         # 宿主端口
        protocol: tcp

写得不对会怎样

写法问题后果处理
宿主端口被占用创建容器阶段失败,整套服务拉起中断先查占用进程,或改宿主端口
值没加引号被解析成非常规数值,端口语义改变含冒号的值统一加引号
绑定地址写成通配服务对全网开放,安全面扩大明确写回环或内网地址
协议写错用户数据报协议服务用传输控制协议发布,访问不通按应用实际协议声明
改了端口没重新拉起旧映射继续生效,改动看似无效重新拉起触发容器重建

端口与网络的配合

  • 同一网络内的服务用服务名互访,不必逐个映射端口,减少暴露面
  • 需要外部访问的服务才映射端口,内部服务留给内部网络
  • 网关类服务集中映射端口,后端服务不直接暴露
  • 宿主端口规划按服务分段登记,避免多项目混部时冲突
  • 映射与防火墙策略同步维护,否则应用正常但外部访问不通
容器之间的通信不需要端口映射。把数据库端口映射出来只是方便本机调试,生产环境应当只保留在内部网络里。
改了端口字段后必须重新拉起让容器重建,只重启进程不会应用新的端口配置,这是「改了没生效」的高频原因。

易错点

  • 宿主端口被占用导致整套服务拉起失败,先确认占用者再决定换端口
  • 含冒号的值没加引号,被解析成非预期数值,端口映射悄悄变形
  • 为了调试把数据库端口映射到宿主后忘记收回,生产环境暴露了内部服务
  • 改了端口只重启容器没有重建,配置看似改了但实际未生效

数据来源与参考

  • Docker 官方文档:Compose ports 参考(docs.docker.com/reference/compose-file/services)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌