Dockerfile(6) - EXPOSE 指令详解

简介: Dockerfile(6) - EXPOSE 指令详解

EXPOSE


通知 Docker 容器在运行时监听指定的网络端口

EXPOSE 端口号
EXPOSE 端口号/协议

默认协议是 TCP

 

同时在 TCP、UDP 上暴露端口

EXPOSE 80/tcp
EXPOSE 80/udp

 

EXPOSE 原理


  • 个人理解:EXPOSE  暴露的端口更像是指明了该容器提供的服务需要用到的端口
  • EXPOSE 并不会直接将端口自动和宿主机某个端口建立映射关系
  • 如果 docker run,指定了自动映射 -P,那么会将所有暴露的端口随机映射到宿主机的高阶端口
  • 如果 docker run,指定了 --net=host 宿主机网络模式,容器中 EXPOSE 指令暴露的端口会直接使用宿主机对应的端口,不存在映射关系
  • 如果 EXPOSE 暴露的端口确定要和某个宿主机端口建立映射关系,还是要用到 docker run -p 参数
  • EXPOSE 显式地标明镜像开放端口,一定程度上提供了操作的便利,也提高了 Dockerfile 的可读性和可维护性

 

dockerfile


下面四个栗子都以这个 dockerfile 来启动容器

FROM nginx

EXPOSE 80

 

EXPOST 端口和 docker run 的栗子


启动容器命令

docker run -it test

 

通过 docker inspect 查看容器元数据

docker inspect mynginx1

容器 80 端口并没有映射到宿主机上

image.png


EXPOSE 端口和 docker run -P 的栗子


启动容器命令

docker run -it -d -P test

 

通过 docker inspect 查看容器元数据

docker inspect mynginx1

image.png

容器 80 端口随机映射到宿主机的高阶端口,所谓高阶端口就是比较大的端口号啦

 

EXPOSE 端口和 docker run --network=host的栗子


启动容器命令

docker run -it -d -network=host test

 

查看容器列表

docker ps

image.png

PORTS 为空,代表没有映射关系

 

通过 docker inspect 查看元数据

docker inspect nd_cray

image.png

 

EXPOSE 端口和 docker run -p 的栗子


启动容器命令

docker run -it -d -p 80:800 test

 

通过 docker inspect 查看容器元数据

docker inspect mynginx1

image.png

容器 80 端口成功映射到宿主机 800 端口

 

验证 nginx 是否部署成功

image.png



相关文章
|
JavaScript Docker 容器
Docker中文件拷贝命令的详细解释与真实案例
Docker中文件拷贝命令的详细解释与真实案例
856 0
|
JSON 缓存 Java
Springboot 之 Filter 实现超大响应 JSON 数据压缩
Springboot 之 Filter 实现超大响应 JSON 数据压缩
449 0
|
关系型数据库 MySQL Java
系统已有MYSQL环境,如何安装宝塔面板
最近一直想搞一个在线博客网站,把代码部署到服务器。 下载己经下载了宝塔的.exe文件,安装提示系统已经存在MYSQL环境,请用纯净系统安装。
1640 0
系统已有MYSQL环境,如何安装宝塔面板
|
小程序
uni-app语音转文字功能demo(小程序同声翻译开箱即用)
uni-app语音转文字功能demo(小程序同声翻译开箱即用)
2203 0
uni-app语音转文字功能demo(小程序同声翻译开箱即用)
|
8月前
|
Java Shell 开发工具
【Dockerfile】在openjdk镜像中添加常用命令工具
总的来说,Dockerfile提供了一种灵活的方式来创建和定制Docker镜像。通过在Dockerfile中添加常用的命令工具,我们可以创建一个满足我们需求的镜像,从而提高我们的工作效率。
181 15
|
Java Spring
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
300 1
|
Web App开发 Linux iOS开发
Chrome浏览器如何导出所有书签并导入书签
【11月更文挑战第4天】本文介绍了如何在 Chrome 浏览器中导出和导入书签。导出时,打开书签管理器,点击“整理”按钮选择“导出书签”,保存为 HTML 文件。导入时,同样打开书签管理器,点击“整理”按钮选择“导入书签”,选择之前导出的 HTML 文件即可。其他主流浏览器也支持导入这种格式的书签文件。
9914 2
|
安全 搜索推荐 Unix
如何提取指定镜像的 Dockerfile
如何提取指定镜像的 Dockerfile
496 0
|
网络安全 开发工具 数据安全/隐私保护
Win10使用Git克隆项目出现fatal: Authentication failed for异常
Windows 10系统中使用Git克隆项目时出现"fatal: Authentication failed for"异常的解决方法,主要是通过修改凭据管理器中的Git凭据密码来解决因密码过期导致的身份验证失败问题。
836 0
Win10使用Git克隆项目出现fatal: Authentication failed for异常
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之如何处理在DI节点同步到OceanBase数据库时,出现SQLException: Not supported feature or function
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
428 0