Docker端口暴露的幾種方式
知識點回顧
Docker要映射了端口,外部才能訪問到容器服務(wù)。Docker映射端口有3個指令,含義分別為:
1. -p(--publish):將容器端口直接映射到宿主機(jī)端口,這是最常用、最靈活的方式。格式為:
-p [宿主機(jī)IP:][宿主機(jī)端口]:[容器端口]
2. -P( --publish-all):將 Dockerfile 中 EXPOSE 聲明的所有端口隨機(jī)映射到宿主機(jī)的高位端口(通常高于 32768)。
3. EXPOSE:在 Dockerfile 中使用的指令。它只是一個元數(shù)據(jù)(聲明),用于說明容器預(yù)期會監(jiān)聽哪些端口,不會將端口映射到宿主機(jī)。
使用場景
1. 不暴露任何端口(默認(rèn)場景)
命令:
docker run -d [image]
這是最隔離的狀態(tài)。容器內(nèi)的端口完全封閉,只有容器自己可以訪問。無論是宿主機(jī)還是外部網(wǎng)絡(luò),甚至是其他容器,都無法通過網(wǎng)絡(luò)連接到這個容器服務(wù)。
網(wǎng)絡(luò)可達(dá):

2. 使用-P(大寫)隨機(jī)映射端口
前提: 要求使用的鏡像的 Dockerfile 中已經(jīng)用 EXPOSE 指令聲明了要暴露的端口。
命令:
docker run -d -P [image]
Docker 宿主機(jī)會隨機(jī)選擇一個未被占用的高位端口映射到容器的目標(biāo)端口。
網(wǎng)絡(luò)可達(dá):

以minio為例子,編寫Dockerfile如下:
FROM www.myharbor.com/library/asianux-7.6.1810:v1 RUN set -ex \ && mkdir -p /data \ && mkdir -p /minio COPY minio /minio/ RUN chmod 777 /minio/minio EXPOSE 9000 9001 ##聲明暴露端口 CMD ["/minio/minio","server","/data","--console-address",":9001"]
構(gòu)建一個鏡像并啟動:
# docker build . -t www.myharbor.com/minio:v1 # docker run -d -P www.myharbor.com/minio:v1

可以看到端口已經(jīng)映射 出來了,并且通過端口訪問正常:

3. 使用-p(小寫,手動指定映射)
這是最常用的方式,有幾種不同的用法:
3.1 映射到宿主機(jī)所有接口的隨機(jī)端口
命令:
docker run -d -p [容器端口] [image]
將容器的指定端口映射到宿主機(jī)所有網(wǎng)絡(luò)接口的一個隨機(jī)高位端口。效果類似-P,但只針對指定的一個端口。
例如:

3.2 映射到宿主機(jī)所有接口的特定端口
命令:
docker run -d -p [宿主機(jī)端口]:[容器端口] [image]
將容器的指定端口映射到宿主機(jī)所有網(wǎng)絡(luò)接口(0.0.0.0)的指定端口。
例如:

3.3 映射到宿主機(jī)特定IP的特定端口
命令:
docker run -d -p [宿主機(jī)IP]:[宿主機(jī)端口]:[容器端口] [image]
將容器的某個端口映射到宿主機(jī)特定IP(例如:10.0.0.101)的指定端口。這樣只有通過這個特定IP才能訪問,增加了安全性。
訪問方式: http://10.0.0.101:[映射端口] (通過宿主機(jī)其他IP無法訪問)
例如:

3.4 指定協(xié)議映射端口
命令:
docker run -d -p [宿主機(jī)端口]:[容器端口]/[協(xié)議] [image]
默認(rèn)映射協(xié)議是 TCP,如果需要其它協(xié)議例如UDP,可以這樣指定。
例如:

網(wǎng)絡(luò)可達(dá):

4. 使用--expose(運(yùn)行時暴露端口)
命令:
docker run -d --expose 80 --expose 443 nginx
這個命令的效果類似于在 Dockerfile 中使用 EXPOSE 指令。它只是在運(yùn)行時為容器打開這些端口,但并沒有映射到宿主機(jī)。這些端口只對在同一個自定義網(wǎng)絡(luò)中的其他容器開放,用于容器間通信。
例如:

網(wǎng)絡(luò)可達(dá):

注: -p 隱含了 --expose 的功能。使用 -p 80:80 時,Docker 會自動--expose 80。
總結(jié)
總結(jié)以上幾種端口映射方式如下:

到此這篇關(guān)于Docker端口暴露的幾種方式的文章就介紹到這了,更多相關(guān)Docker端口暴露內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker 實現(xiàn)瀏覽器里開發(fā)Android應(yīng)用的功能
這篇文章主要介紹了Docker 實現(xiàn)瀏覽器里開發(fā)Android應(yīng)用的功能的相關(guān)資料,這里對布置環(huán)境做了詳細(xì)的步驟,也許你能用到這樣的功能,需要的朋友可以參考下2016-11-11
通過Dockerfile構(gòu)建Docker鏡像的方法步驟
這篇文章主要介紹了通過Dockerfile構(gòu)建Docker鏡像的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Alpine鏡像中telnet轉(zhuǎn)移至busybox-extras
今天小編就為大家分享一篇關(guān)于Alpine鏡像中telnet轉(zhuǎn)移至busybox-extras,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Docker容器跨主機(jī)通信overlay網(wǎng)絡(luò)的解決方案
Overlay網(wǎng)絡(luò)是指在不改變現(xiàn)有網(wǎng)絡(luò)基礎(chǔ)設(shè)施的前提下,通過某種約定通信協(xié)議,把二層報文封裝在IP報文之上的新的數(shù)據(jù)格式,本文給大家介紹Docker容器跨主機(jī)通信overlay網(wǎng)絡(luò)的方案,感興趣的朋友一起看看吧2022-02-02
如何使用Docker部署briefing視頻聊天系統(tǒng)
briefing是一個開源的、安全的直接視頻群聊平臺,這篇文章主要介紹了使用Docker部署briefing視頻聊天系統(tǒng)的詳細(xì)過程,需要的朋友可以參考下2024-01-01

