github编辑

7.9 EXPOSE 暴露端口

7.9.1 基本语法

EXPOSE <端口> [<端口>/<协议>...]

EXPOSE 声明容器运行时提供服务的端口。这是一个 文档性质的声明,告诉使用者容器会监听哪些端口。


7.9.2 基本用法

## 声明单个端口

EXPOSE 80

## 声明多个端口

EXPOSE 80 443

## 声明 TCP 和 UDP 端口

EXPOSE 80/tcp
EXPOSE 53/udp

7.9.3 EXPOSE 的作用

1. 文档说明

告诉镜像使用者,容器将在哪些端口提供服务:

2. 配合 -P 使用

使用 docker run -P 时,Docker 会自动映射 EXPOSE 的端口到宿主机随机端口:


7.9.4 EXPOSE vs -p

特性
EXPOSE
-p

位置

Dockerfile

docker run 命令

作用

声明/文档

实际端口映射

是否必需

是 (外部访问时)

映射发生时

不发生

运行时发生

spinner

没有 EXPOSE 也能 -p


7.9.5 常见误解

误解:EXPOSE 会打开端口

EXPOSE 不会:

  • 自动进行端口映射

  • 让服务可从外部访问

  • 在容器启动时开启端口监听

EXPOSE 只是元数据声明。容器是否实际监听该端口,取决于容器内的应用。

正确理解


7.9.6 最佳实践

1. 总是声明应用使用的端口

2. 使用明确的协议

3. 与应用实际端口保持一致


7.9.7 使用环境变量


7.9.8 在 Compose 中

在 Compose 中配置如下:

expose 在 Compose 中仅用于容器间通信的文档说明,不进行端口映射。


最后更新于