EXPOSE和端口映射參數-p、-P總結

EXPOSE:功能爲暴漏容器運行時的監聽端口給外部,但是EXPOSE並不會使容器訪問主機的端口,如果想使得容器與主機的端口有映射關係,必須在容器啓動的時候加上 -P參數。
-P:大寫P爲自動映射,會將EXPOSE暴露出來的端口隨機映射到宿主機的端口上,如果沒有暴露端口,就不會有映射。
-p:小寫p爲手動映射,需要自己指定宿主機的端口和容器的端口,形式爲:
-p    宿主機端口:容器端口

總結:

(1)無論有沒有暴露端口、自動映射或者手動映射,宿主機都可以通過容器ip+80(隨nginx監聽端口改變而改變)端口訪問服務;
(2)要通過宿主機ip+端口的方式訪問服務,宿主機的端口必須與容器端口有映射關係;
(3)如果沒有暴露端口,-P自動映射不會映射任何端口,-p可以指定宿主機端口和容器端口形成映射。

過程如下:

環境:使用dockerfile製作nginx鏡像進行試驗
情況一:暴露端口80,不使用映射


分別使用宿主機ip地址+80端口、容器ip地址+80端口嘗試訪問nginx,結果如下:

宿主機ip地址+80端口無法訪問
容器ip地址+80端口可以訪問

情況二:暴露端口80,使用自動映射-P


分別使用宿主機ip地址+自動映射的32778端口、容器ip地址+80端口嘗試訪問nginx,結果如下:


宿主機ip地址+自動映射的32778端口可以訪問
容器ip地址+80端口可以訪問

情況三:暴露端口80,使用手動映射-p


分別使用宿主機ip地址+手動映射的8081端口、容器ip地址+80端口嘗試訪問nginx,結果如下:


宿主機ip地址+手動映射的8081端口可以訪問
容器ip地址+80端口可以訪問

情況四:不暴露端口,不使用映射


分別使用宿主機ip地址+80端口、容器ip地址+80端口嘗試訪問nginx,結果如下:

宿主機ip地址+80端口無法訪問
容器ip地址+80端口可以訪問

情況五:不暴露端口,使用自動映射-P


分別使用宿主機ip地址+80端口(無自動映射端口,因此用80)、容器ip地址+80端口嘗試訪問nginx,結果如下:

宿主機ip地址+80端口無法訪問
容器ip地址+80端口可以訪問

情況六:不暴露端口,使用手動映射-p


分別使用宿主機ip地址+手動映射的8082端口、容器ip地址+80端口嘗試訪問nginx,結果如下:


宿主機ip地址+手動映射的8082端口可以訪問
容器ip地址+80端口可以訪問

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章