EXPOSE 443/tcp
`EXPOSE` 是 Dockerfile 中的一个指令,用于指定容器运行时监听的端口。这个指令不会对容器的运行产生任何效果,它只用于文档目的,告诉其他开发者和用户容器需要暴露哪些端口。
### 命令格式:
EXPOSE <port> [<port>...]
其中 `<port>` 是容器内部监听的端口号。
### 详细解释:
- **`EXPOSE` 指令**:告诉 Docker 在构建镜像时,容器应该监听哪些端口。这些端口在容器运行时不会自动被映射到宿主机上,需要在运行容器时使用 `-p` 参数来指定端口映射。
- **`tcp` 协议**:指定端口使用的协议类型,可以是 `tcp`、`udp` 或 `sctp`。在大多数情况下,如果不指定协议,默认是 `tcp`。
### 举例说明:
假设你正在构建一个 Web 服务器的 Docker 镜像,该服务器监听 443 端口(HTTPS 服务通常使用的端口)。你的 Dockerfile 可能包含以下内容:
# 使用官方的 nginx 镜像作为基础镜像
FROM nginx:latest
# 将当前目录下的网站内容复制到容器中的 /usr/share/nginx/html 目录下
COPY . /usr/share/nginx/html
# 暴露 443 端口
EXPOSE 443/tcp
在这个例子中,`EXPOSE 443/tcp` 告诉 Docker 构建的镜像应该监听 443 端口,使用 TCP 协议。
### 运行容器时的端口映射:
当你使用 `docker run` 命令来启动容器时,需要使用 `-p` 参数来映射端口。例如:
```bash
docker run -p 443:443/tcp -d my-web-server-image
```
这个命令会将容器内部的 443 端口映射到宿主机的 443 端口上,这样外部就可以通过宿主机的 443 端口来访问容器中运行的 Web 服务器。
### 注意事项:
- `EXPOSE` 指令不会影响容器的网络设置,它只是一个文档说明。
- 容器的端口映射需要在运行时指定,`EXPOSE` 指令本身不负责端口映射。
- 如果不使用 `-p` 参数映射端口,容器的端口将不会被外部访问。