EXPOSE 聲明連接埠
格式為 EXPOSE <連接埠1> [<連接埠2>...]
。
EXPOSE
指令是聲明執行時容器提供服務連接埠,這只是一個聲明,在執行時並不會因為這個聲明應用就會開啟這個連接埠的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是說明映像檔使用者理解這個映像檔服務的守護連接埠,以方便設定對應;另一個用處則是在執行時使用隨機連接埠對應時,也就是 docker run -P
時,會自動隨機對應 EXPOSE
的連接埠。
此外,在早期 Docker 版本中還有一個特殊的用處。以前所有容器都執行於 預設橋接網路中,因此所有容器互相之間都可以直接存取,這樣存在一定的安全性問題。於是有了一個 Docker 引擎參數 --icc=false
,當指定該參數後,容器間將 預設無法互訪,除非互相間使用了 --links
參數的容器才可以互通,並且只有映像檔中 EXPOSE
所聲明的連接埠才可以被存取。這個 --icc=false
的使用方式,在引入了 docker network
後已經基本不用了,透過自訂網路可以很輕鬆的實作容器間的互聯與隔離。
要將 EXPOSE
和在執行時使用 -p <宿主連接埠>:<容器連接埠>
區分開來。-p
,是對應宿主連接埠和容器連接埠,換句話說,就是將容器的對應連接埠服務公開給外界存取,而 EXPOSE
僅僅是聲明容器打算使用什麼連接埠而已,並不會自動在宿主進行連接埠對應。