全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-21 5 分钟 ✍️ juanwangdev

EXPOSE 端口声明

EXPOSE 指令用于声明容器运行时监听的端口,下面介绍其用法与限制。

EXPOSE 指令

dockerfile
# 声明容器监听端口
EXPOSE 80

# 声明多个端口
EXPOSE 80 443

# 声明 UDP 端口
EXPOSE 53/udp

# 同时声明 TCP 和 UDP
EXPOSE 53/tcp 53/udp

EXPOSE 仅是文档声明,告诉用户容器使用哪个端口,不会自动映射到宿主机。

声明 vs 实际映射

Bash
# 仅有 EXPOSE,不映射端口
docker run -d my-nginx

# 外部无法访问,需要手动映射
docker run -d -p 8080:80 my-nginx

使用 -P 自动映射

Bash
# -P 参数自动映射所有 EXPOSE 端口到随机端口
docker run -d -P my-nginx

# 查看映射
docker port my-nginx
# 输出: 80/tcp -> 0.0.0.0:49153

最佳实践

声明常用端口

dockerfile
# Nginx
EXPOSE 80 443

# Node.js 应用
EXPOSE 3000

# MySQL
EXPOSE 3306

# Redis
EXPOSE 6379

配合环境变量

dockerfile
EXPOSE ${PORT:-3000}

# 构建时设置
docker build --build-arg PORT=8080 -t my-app .

查看声明

Bash
# 查看镜像 EXPOSE 端口
docker inspect my-image | grep -A 5 "ExposedPorts"

# 输出
"ExposedPorts": {
    "80/tcp": {},
    "443/tcp": {}
}

与 -p 参数配合

dockerfile
# Dockerfile 声明
EXPOSE 80
Bash
# 运行时映射
docker run -d -p 8080:80 my-app

# 仅 EXPOSE 不映射
docker run -d my-app  # 外部不可访问

# -P 自动映射
docker run -d -P my-app  # 随机端口

要点总结

  • EXPOSE 仅声明容器监听的端口,不自动映射到宿主机
  • 使用 -p 宿主机:容器 手动映射端口
  • 使用 -P 自动映射所有 EXPOSE 端口到随机端口
  • EXPOSE 主要用于文档和 -P 参数配合
  • 生产环境建议明确使用 -p 映射端口,避免随机端口管理困难

📝 发现内容有误?点击此处直接编辑

← 上一篇 Dockerfile 语法结构
下一篇 → WORKDIR 与 ENV 指令
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库