首页/云/云与容器速查/EXPOSE 与 -p 的区别
本包目录(340 条)
云基础概念44 条计算与存储56 条网络与安全组33 条
容器与 Docker106 条
Kubernetes68 条容器排障33 条

EXPOSE 与 -p 的区别

EXPOSE 只是镜像里的声明性元数据,不打开任何端口;真正对外映射必须靠 -p/-P。两者混淆是『端口为什么不通』类问题的头号来源。

云与容器速查云更新于 2026-10-12
EXPOSE 80镜像元数据:声明应用监听,不建立任何映射
-p 8080:80实际建立映射并让宿主监听 8080
-P把镜像所有 EXPOSE 端口随机发布到宿主
容器间通信同网络按容器名+容器端口直连,无需发布
验证docker port / inspect 的 .NetworkSettings.Ports

核对思路

核对思路
docker port web
docker inspect web -f '{{json .NetworkSettings.Ports}}'
ss -lntp | grep 8080
未声明 EXPOSE 的端口照样能用 -p 发布;EXPOSE 了但不写 -p 依旧不通——两者互不依赖。

易错点

  • 改完 Dockerfile 的 EXPOSE 就以为端口通了:没发布还是不通
  • 用 -P 部署:宿主端口随机漂移,外部依赖全部对不上

数据来源与参考

  • Docker Docs:EXPOSE
  • Docker Docs:Port publishing

相关工具

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