Docker Compose 中的 `ports` 和 `expose` 都与容器的端口映射和暴露有关,但在功能和使用上有一些区别。
1. `ports`:`ports` 是 Docker Compose 文件中的一个关键字,用于将容器的端口映射到主机上的端口。它的语法为 `<host>:<container>`,其中 `<host>` 是指主机上的端口,`<container>` 是指容器内部的端口。通过使用 `ports`,可以将容器内部的服务通过主机上的特定端口对外可访问。
以下是一个使用 `ports` 的示例:
```yaml
services:
web:
build: .
ports:
- "8080:80"
```
上述示例中,将容器内的端口 `80` 映射到主机上的端口 `8080`,这意味着通过访问主机的 `8080` 端口,可以访问到容器内运行的服务。
2. `expose`:`expose` 是 Docker Compose 文件中的另一个关键字,用于指定容器内部暴露的端口,但并不会自动将其映射到主机上。它的语法与 `ports` 类似,仅指定容器内部的端口号。
以下是一个使用 `expose` 的示例:
```yaml
services:
web:
build: .
expose:
- 80
```
上述示例中,容器内部的端口 `80` 被暴露出来,但并没有在主机上进行端口映射。这意味着其他容器可以通过容器网络直接访问该端口,但主机上的其他服务无法直接访问。
综上所述,`ports` 是用于将容器的端口映射到主机上的端口,从而使容器的服务能够通过主机可访问。而 `expose` 则是指定容器内部暴露的端口,但不进行主机端口映射,只能在容器网络内部进行访问。