EXPOSE 的用途:
1、在Dockerfile中聲明了那些端口是將要開放的。
2、在構建容器時通過 -P (大寫的P)可以隨機映射端口。(如果EXPOSE沒有指定端口,那么使用 -P 參數無效)
准確來說 Dockerfile 中的 EXPOSE用處不大!原因:
1、真正的暴露端口是在創建容器 run 的時候指定的 -p 或者 -P 參數,先來說說 -p 參數后面跟的是【主機端口:容器端口】,那么問題就來了既然在運行的時候還需要指定端口那么 EXPOSE還要什么用呢!
2、當我們創建容器 run 的時候指定參數是 -P,那么在運行之后 會把 EXPOSE 的端口隨機映射到主機的不同端口,這時問題又來了既然映射到不同的端口那么容器的端口就是是隨機的不確定的,那就要在運行之后才能知道端口,這樣使用起來是極其不便的。
本着存在即合理的想法來解釋一下EXPOSE的真正用途:
EXPOSE可以不用但是不能沒有,因為 Dockerfile 不一定是一個人維護的,或者說當下一個運維人員接手項目之后能夠通過 Dockerfile 里面的參數掌握整體的邏輯,一切還是為了規范。