7.9 EXPOSE 暴露端口
7.9.1 基本语法
EXPOSE <端口> [<端口>/<协议>...]EXPOSE 声明容器运行时提供服务的端口。这是一个 文档性质的声明,告诉使用者容器会监听哪些端口。
7.9.2 基本用法
## 声明单个端口
EXPOSE 80
## 声明多个端口
EXPOSE 80 443
## 声明 TCP 和 UDP 端口
EXPOSE 80/tcp
EXPOSE 53/udp7.9.3 EXPOSE 的作用
1. 文档说明
告诉镜像使用者,容器将在哪些端口提供服务:
2. 配合 -P 使用
使用 docker run -P 时,Docker 会自动映射 EXPOSE 的端口到宿主机随机端口:
7.9.4 EXPOSE vs -p
特性
EXPOSE
-p
位置
Dockerfile
docker run 命令
作用
声明/文档
实际端口映射
是否必需
否
是(外部访问时)
映射发生时
不发生
运行时发生
没有 EXPOSE 也能 -p
7.9.5 常见误解
误解:EXPOSE 会打开端口
EXPOSE 不会:
自动进行端口映射
让服务可从外部访问
在容器启动时开启端口监听
EXPOSE 只是元数据声明。容器是否实际监听该端口,取决于容器内的应用。
正确理解
7.9.6 最佳实践
1. 总是声明应用使用的端口
2. 使用明确的协议
3. 与应用实际端口保持一致
7.9.7 使用环境变量
7.9.8 在 Compose 中
在 Compose 中配置如下:
expose 在 Compose 中仅用于容器间通信的文档说明,不进行端口映射。
最后更新于