EXPOSE 28080/tcp
在Dockerfile中,`EXPOSE`是一个指令,用来指定容器在运行时监听的端口。这个指令不会实际上发布端口到主机上,也就是说,它不会修改容器的防火墙或绑定到主机的端口。它仅仅是一个声明,告诉Docker容器在运行时应该监听哪些端口。
### 详细解释:
- **EXPOSE 28080/tcp**:这条指令表示容器应该监听28080端口,并且使用TCP协议。端口号前的数字28080是端口号,`/tcp`指明了使用的协议类型,这里是TCP。
### 作用:
1. **文档目的**:`EXPOSE`指令主要用于文档目的,帮助理解容器的网络需求。
2. **Docker Compose**:在使用Docker Compose时,`EXPOSE`指令可以被用来指定容器之间或容器与外部世界的端口映射。
3. **端口检查**:某些Docker运行时,如Docker Swarm,可以使用`EXPOSE`指令来自动配置端口映射。
### 举例说明:
假设你有一个Web服务,它运行在容器内的28080端口上,你的Dockerfile可能如下所示:
# 使用官方的Node.js镜像作为基础镜像
FROM node:14
# 设置工作目录为/app
WORKDIR /app
# 复制package.json和package-lock.json到工作目录
COPY package*.json ./
# 安装项目依赖
RUN npm install
# 复制项目文件到工作目录
COPY . .
# 声明容器运行时监听的端口
EXPOSE 28080
# 容器启动时执行的命令,启动Web服务
CMD ["node", "app.js"]
在这个例子中,`EXPOSE 28080`告诉Docker容器在运行时应该监听28080端口。当使用`docker run`命令启动容器时,你可以使用`-p`参数来指定端口映射,例如:
docker run -p 8080:28080 my-web-service
这条命令会将容器内的28080端口映射到主机的8080端口上,这样你就可以通过访问`http://localhost:8080`来访问Web服务了。如果没有使用`-p`参数,则默认情况下,容器的端口不会映射到主机上,外部无法访问。