首页/云/Docker 容器速查/EXPOSE 与 -p 的区别
网络与存储52 条

EXPOSE 与 -p 的区别

EXPOSE 只是镜像的端口声明(文档 + -P 依据),不产生宿主机监听;-p 才是真正建立映射。两者常被混为一谈。

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

对比

维度EXPOSE(Dockerfile)-p / --publish(运行时)
作用声明容器监听意图建立宿主到容器的端口映射
宿主监听不产生产生对应宿主机监听
容器互访同网络可直接按容器名加端口访问与容器互访无关
典型误解写了就对外可访问不写就不会被外部访问

示例

示例
docker run -d nginx                      # EXPOSE 80,但宿主未发布
docker run -d -p 8080:80 nginx          # 映射后访问 http://<宿主>:8080
docker run -d --network app-net nginx  # 同网络容器直接访问 nginx:80
微服务间通信走容器网络即可,只有需要被宿主机之外访问的服务才需要 -p。

易错点

  • 误以为没写 -p 就更安全:默认 bridge 下容器仍可经 NAT 主动外联,端口暴露与出网是两回事
  • 反代配置里写容器名请确保反代容器与服务容器同网络,否则要改用宿主机地址

数据来源与参考

  • Docker 官方文档:EXPOSE 指令与端口发布(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌