国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何實現(xiàn)docker內(nèi)部容器之間的端口訪問

這篇具有很好參考價值的文章主要介紹了如何實現(xiàn)docker內(nèi)部容器之間的端口訪問。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Docker 的普及促使眾多應用遷至其上部署,得益其諸多優(yōu)勢。然而,相較于傳統(tǒng)非 Docker 環(huán)境中各應用通過 127.0.0.1:端口 即可輕松互訪,Docker 容器若未經(jīng)端口映射,彼此間端口則無法直接相通。是否存在更優(yōu)方案以應對這一挑戰(zhàn)?

1 場景描述

場景簡述:alpine-client 與 alpine-server 兩容器,前者訪問后者監(jiān)聽之端口,以此探析 Docker 內(nèi)部容器間端口訪問機制。

2 建立兩個容器

2.1 通過 Dockerfile 構(gòu)建鏡像

由于這次測試功能很簡單,可以通過一個 Dockerfile 來創(chuàng)建容器,一個鏡像加載成兩個容器,容器里執(zhí)行的代碼不同而已。

2.1.1 創(chuàng)建 Dockerfile 文件

此 Dockerfile 可以用做一個通用的模板,包含了基本功能框架,用戶可以自行在此基礎上修改。

# 以 alpine:3.10 為基礎鏡像
FROM alpine:3.10

# 設置鏡像源為清華大學鏡像
RUN echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.10/main" > /etc/apk/repositories \
    && echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.10/community" >> /etc/apk/repositories \
    && apk update && apk upgrade

# 安裝依賴包及工具
RUN apk add --no-cache \
    bash \ 
    netcat-openbsd

# 設置工作目錄
WORKDIR /root

# 拷貝需要的文件,支持通配符
# COPY *.sh /root/

# 在 Dockerfile 中添加Entrypoint test.sh,根據(jù)需要添加即可
# ENTRYPOINT ["/bin/bash", "-c", "/root/test.sh"]

簡單解釋一下這個 Dockerfile 模板文件:

1)引用基礎鏡像
這個必須有(此語句后面的語句都是可選項),且必須是第一句。我習慣引用 alpine 鏡像,體積小巧、功能強大。

2)設置鏡像源
先改寫鏡像路徑文件,并運行 update、upgrade,使更改生效。關(guān)于鏡像源,清華、阿里根據(jù)您的喜好選擇就可以了,主要是用來加快軟件安裝速度。

3)安裝依賴包及工具
使用 RUN 命令來執(zhí)行依賴包及工具的安裝,安裝工作最好是在一個命令里執(zhí)行完成,這樣鏡像就不會添加很多層,導致鏡像文件變大。其中"\“是用來將分行的命令字符串串接起來,”&&"是用來按序依次安裝多個命令。

4)設置工作目錄
設置工作目錄后,容器內(nèi)部默認目錄就是設置的工作目錄,方便操作。

5)拷貝需要的文件
這一步可以將需要的文件從本機拷入鏡像文件。

6)執(zhí)行 ENTRYPOINT 入口腳本(或者使用CMD)
當容器啟動時,會執(zhí)行此處指定的腳本或命令。

2.1.2 編譯鏡像

docker build -t alpine-net:1.0.0 .

2.2 生成容器

生成 alpine-client 容器:

docker run -itd --name alpine-client alpile-net:1.0.0

生成 alpine-server 容器:`

docker run -itd -p 8888:8888 --name alpine-server alpile-net:1.0.0

alpine-server 容器加了一個端口映射,將 alpine-server 里監(jiān)聽的 8888 端口映射到該容器的宿主機的 8888 端口。

3 獲取 IP 地址

3.1 獲取 alpine-client 相關(guān) IP 地址

3.1.1 獲得 alpine-client 容器本身的 IP 地址

在 alpine-client 終端輸入:

ifconfig

運行后返回結(jié)果如下:

eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:65535  Metric:1
          RX packets:197 errors:0 dropped:0 overruns:0 frame:0
          TX packets:89 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22832 (22.2 KiB)  TX bytes:5821 (5.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:524 (524.0 B)  TX bytes:524 (524.0 B)

得到兩個 IP ,127.0.0.1 和 172.17.0.2

3.1.2 獲取 alpine-client 容器網(wǎng)關(guān) IP 地址

在 alpine-client 終端輸入:

route -n

運行后返回結(jié)果如下:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

得到網(wǎng)關(guān) IP 地址:172.17.0.1。

3.1.3 獲取 alpine-server 容器網(wǎng)關(guān) IP 地址

同上操作,過程略。
可以得到 alpine-server 相關(guān)地址:
alpine-server 本機地址:127.0.0.1 和 和 172.17.0.3
alpine-server 網(wǎng)關(guān)地址:172.17.0.1

4 測試訪問

在 alpine-server 的終端里輸入網(wǎng)絡端口監(jiān)聽命令:

nc -lk 8888 # 監(jiān)聽 8888 端口

監(jiān)聽 8888 端口,測試讓 alpine-client 連接。以下如果沒有特殊說明,默認命令行運行窗口為 alpine-client 的終端窗口

4.1 通過容器名稱訪問

nc alpine-server 8888

返回:

nc: getaddrinfo: Name does not resolve

提示:目標容器名 alpine-server 找不到,所以連接失??!

4.2 通過容器 IP 訪問

nc 127.17.0.3 8888

連接失?。≌f明容器端口并沒有對“隔壁”容器開放。

4.3 通過網(wǎng)關(guān) IP 訪問

nc 127.17.0.1 8888

連接失敗!說明容器端口映射,并不是映射到網(wǎng)關(guān)上。

4.4 通過 docker 宿主機名訪問

docker 提供了一個宿主機名:host.docker.internal,所有容器都可以訪問到這個主機名。測試:

nc host.docker.internal 8888

連接成功!且在 alpine-client 輸入的信息可以成功發(fā)送到 alpine-server,且實現(xiàn)的是雙向通訊??梢酝ㄟ^ host.docker.internal 這個主機名可以訪問到容器映射出來的端口,但無法訪問到容器內(nèi)部的端口。

4.5 通過 docker-compose 創(chuàng)建容器的方案

此部分在我的博文《docker安裝、調(diào)試qsign簽名服務器》里已經(jīng)應用過,此處就不再贅述。這種方式的 docker-compose.yml 文件已經(jīng)定義好了容器之間的關(guān)系,將各個容器納入一個統(tǒng)一的網(wǎng)卡里,靈活性稍差一點,推薦用在成熟、穩(wěn)定的項目里。

此文描述的方式是采用“分離式”,各個容器是獨立的,容器之間的聯(lián)系通過映射端口的方式,通過 host.docker.internal 進行連接,便于動態(tài)靈活調(diào)整連接關(guān)系,以及系統(tǒng)的擴展等。

5 總結(jié)

在未實施容器分組編排的場景中,本文深入探究并揭示了一種利用 host.docker.internal 實現(xiàn)容器間直接互訪的有效途徑。相較于傳統(tǒng)的基于 IP 地址的訪問方式,選用 host.docker.internal 作為連接標識具有顯著優(yōu)勢:
1)穩(wěn)定性增強:
在容器內(nèi)部的配置文件中,可以將 host.docker.internal 作為固定的目標地址進行硬編碼(即“寫死”)。此舉消除了因依賴動態(tài)分配或可能變動的 IP 地址而導致的配置脆弱性。當容器重啟、遷移或者網(wǎng)絡環(huán)境發(fā)生調(diào)整時,IP 地址可能會發(fā)生變化,而使用 host.docker.internal 則能確保連接指向始終有效,無需隨 IP 變動而頻繁更新配置。
2)簡化管理:
采用 host.docker.internal 作為連接字符串,簡化了容器間交互的管理復雜度。運維人員無需跟蹤每個容器的具體 IP 地址,也不必在 IP 變化時手動調(diào)整關(guān)聯(lián)容器的配置文件。這種抽象化的尋址方式使得容器間的依賴關(guān)系更為清晰,易于理解和維護。
3)兼容性與可移植性提升:
host.docker.internal 是 Docker 系統(tǒng)內(nèi)建的特殊域名,旨在提供一種標準、跨平臺的方式來訪問宿主機提供的服務。這意味著無論宿主機的實際IP如何變化,或者在不同的部署環(huán)境中(如開發(fā)、測試、生產(chǎn)),只要支持 Docker,該域名即可確保容器間的互訪順利進行。這種設計增強了容器應用在不同環(huán)境中的兼容性和可移植性。

綜上所述,在無編排工具介入的情況下,利用 host.docker.internal 進行容器間的互訪是一種既穩(wěn)健又便捷的選擇。它不僅避免了因 IP 變動引發(fā)的連接失敗問題,還簡化了管理流程,提升了應用在不同 Docker 環(huán)境下的適應性。文章來源地址http://www.zghlxwxcb.cn/news/detail-855570.html

到了這里,關(guān)于如何實現(xiàn)docker內(nèi)部容器之間的端口訪問的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Docker容器內(nèi)部無法訪問外網(wǎng)原因之一

    Docker容器內(nèi)部無法訪問外網(wǎng)原因之一

    部署了一個Docker環(huán)境,宿主機可以訪問Internet,啟動了一個容器發(fā)現(xiàn)容器里的服務無法訪問Internet,Docker網(wǎng)絡使用的是橋接(bridge)模式。 使用Docker橋接模式啟動的容器,宿主機如果可以訪問外網(wǎng),按理來說Docker容器本身也可以訪問外網(wǎng)的。其原理:容器網(wǎng)卡與宿主機的dock

    2023年04月25日
    瀏覽(34)
  • 兩臺服務器上的兩個docker容器之間配置ssh免密登錄

    兩臺服務器上的兩個docker容器之間配置ssh免密登錄

    因為要在兩臺服務器的容器上使用ucx實現(xiàn)GPU的RDMA,所以需要兩個容器之間ssh免密登錄 步驟如下(所有步驟均在容器內(nèi)部進行) 切換成root用戶 在容器內(nèi)部安裝openssh: # apt-get install openssh-client openssh-server 編輯ssh的配置文件,更改ssh的端口: # vim /etc/ssh/sshd_config 在最后一行加

    2024年03月13日
    瀏覽(22)
  • Docker 容器正常啟動但通過ip加端口無法訪問

    Docker 容器正常啟動但通過ip加端口無法訪問

    前置條件:使用的阿里云輕量云服務器,ECS服務器應該也是類似的。 問題排查過程 排查linux服務器本身的防火墻是否開啟,查看后是關(guān)閉的。 排查輕量云服務器的安全組是否將端口加入安全組,否則也是無法訪問的,端口已加入安全組,可以排除這個問題。 通過tcping等端口

    2024年02月08日
    瀏覽(24)
  • 解決docker容器之間網(wǎng)絡互通 啟動web服務只能本地localhost訪問無法從外部訪問

    docker容器之間相互訪問 1.查看當前的網(wǎng)絡 Copy [root@host ~]# docker network ls NETWORK ID ? ? ? ? ?NAME ? ? ? ? ? ? ? ?DRIVER ? ? ? ? ? ? ?SCOPE 3dd4643bb158 ? ? ? ?bridge ? ? ? ? ? ? ?bridge ? ? ? ? ? ? ?local 748b765aca52 ? ? ? ?host ? ? ? ? ? ? ? ?host ? ? ? ? ? ? ? ?local 4d59a0cd3ff

    2024年02月10日
    瀏覽(92)
  • 如何使用Docker構(gòu)建Nacos容器并實現(xiàn)固定公網(wǎng)地址遠程訪問

    如何使用Docker構(gòu)建Nacos容器并實現(xiàn)固定公網(wǎng)地址遠程訪問

    Nacos是阿里開放的一款中間件,也是一款服務注冊中心,它主要提供三種功能:持久化節(jié)點注冊,非持久化節(jié)點注冊和配置管理。 本例通過結(jié)合Cpolar內(nèi)網(wǎng)穿透實現(xiàn)遠程訪問Nacos 提供的UI (控制臺)界面,幫助管理所有的服務和應用的配置 Cpolar內(nèi)網(wǎng)穿透是一種安全的內(nèi)網(wǎng)穿透云服務

    2024年01月17日
    瀏覽(21)
  • 讓Docker容器內(nèi)的服務能夠訪問宿主機上的其他容器的端口,可以使用Docker的網(wǎng)絡功能

    要讓Docker容器內(nèi)的服務能夠訪問宿主機上的其他容器的端口,可以使用Docker的網(wǎng)絡功能。 Docker提供了多種網(wǎng)絡驅(qū)動程序,例如 bridge 、 host 、 overlay 等。其中, bridge 是默認的網(wǎng)絡驅(qū)動程序,它會在每個Docker容器內(nèi)創(chuàng)建一個虛擬的網(wǎng)卡,同時會為每個容器分配一個獨立的IP地址

    2024年02月14日
    瀏覽(20)
  • 如何在Docker中搭建MinIO容器并實現(xiàn)無公網(wǎng)ip遠程訪問本地服務

    如何在Docker中搭建MinIO容器并實現(xiàn)無公網(wǎng)ip遠程訪問本地服務

    MinIO是一個開源的對象存儲服務器,可以在各種環(huán)境中運行,例如本地、Docker容器、Kubernetes集群等。它兼容Amazon S3 API,因此可以與現(xiàn)有的S3工具和庫無縫集成。MinIO的設計目標是高性能、高可用性和可擴展性。它可以在分布式模式下運行,以滿足不同規(guī)模的存儲需求。 MinIO是

    2024年01月17日
    瀏覽(29)
  • 如何在群輝NAS使用Docker搭建容器魔方并實現(xiàn)無公網(wǎng)ip遠程訪問

    如何在群輝NAS使用Docker搭建容器魔方并實現(xiàn)無公網(wǎng)ip遠程訪問

    本文主要介紹如何在群輝7.2版本中使用Docker安裝容器魔方,并結(jié)合Cpolar內(nèi)網(wǎng)穿透工具實現(xiàn)遠程訪問本地網(wǎng)心云容器魔方界面. 容器魔方是由網(wǎng)心云推出的一款Docker容器鏡像軟件,通過簡單安裝后即可快速加入網(wǎng)心云共享計算生態(tài)網(wǎng)絡,為網(wǎng)心科技星域云貢獻帶寬和存儲資源,

    2024年02月02日
    瀏覽(25)
  • docker 容器如何查看正在運行容器的端口映射

    1、查看docker容器的版本 2、查看正在運行的容器 3、查看容器的端口映射 總結(jié):到此就完成了查看正在運行容器的端口映射.

    2024年02月12日
    瀏覽(20)
  • 如何在CentOS使用Docker搭建MinIO容器并實現(xiàn)無公網(wǎng)ip遠程訪問本地服務

    如何在CentOS使用Docker搭建MinIO容器并實現(xiàn)無公網(wǎng)ip遠程訪問本地服務

    MinIO是一個開源的對象存儲服務器,可以在各種環(huán)境中運行,例如本地、Docker容器、Kubernetes集群等。它兼容Amazon S3 API,因此可以與現(xiàn)有的S3工具和庫無縫集成。MinIO的設計目標是高性能、高可用性和可擴展性。它可以在分布式模式下運行,以滿足不同規(guī)模的存儲需求。 MinIO是

    2024年04月15日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包