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映射端口,避免随机端口管理困难
📝 发现内容有误?点击此处直接编辑