EXPOSE 的用途:
1、在Dockerfile中声明了那些端口是将要开放的。
2、在构建容器时通过 -P (大写的P)可以随机映射端口。(如果EXPOSE没有指定端口,那么使用 -P 参数无效)
准确来说 Dockerfile 中的 EXPOSE用处不大!原因:
1、真正的暴露端口是在创建容器 run 的时候指定的 -p 或者 -P 参数,先来说说 -p 参数后面跟的是【主机端口:容器端口】,那么问题就来了既然在运行的时候还需要指定端口那么 EXPOSE还要什么用呢!
2、当我们创建容器 run 的时候指定参数是 -P,那么在运行之后 会把 EXPOSE 的端口随机映射到主机的不同端口,这时问题又来了既然映射到不同的端口那么容器的端口就是是随机的不确定的,那就要在运行之后才能知道端口,这样使用起来是极其不便的。
本着存在即合理的想法来解释一下EXPOSE的真正用途:
EXPOSE可以不用但是不能没有,因为 Dockerfile 不一定是一个人维护的,或者说当下一个运维人员接手项目之后能够通过 Dockerfile 里面的参数掌握整体的逻辑,一切还是为了规范。