github编辑

EXPOSE 暴露端口

基本语法

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

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


基本用法

# 声明单个端口
EXPOSE 80

# 声明多个端口
EXPOSE 80 443

# 声明 TCP 和 UDP 端口
EXPOSE 80/tcp
EXPOSE 53/udp

EXPOSE 的作用

1. 文档说明

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

2. 配合 -P 使用

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


EXPOSE vs -p

特性
EXPOSE
-p

位置

Dockerfile

docker run 命令

作用

声明/文档

实际端口映射

是否必需

是(外部访问时)

映射发生时

不发生

运行时发生

没有 EXPOSE 也能 -p


常见误解

误解:EXPOSE 会打开端口

EXPOSE 不会:

  • 自动进行端口映射

  • 让服务可从外部访问

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

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

正确理解


最佳实践

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

2. 使用明确的协议

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


使用环境变量


在 Compose 中

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


本章小结

要点
说明

作用

声明容器提供服务的端口(文档)

不会

自动映射端口或开放外部访问

配合

docker run -P 自动映射

外部访问

需要 -p 宿主机端口:容器端口

语法

EXPOSE 80EXPOSE 80/tcp

延伸阅读

最后更新于