欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何解決docker容器訪問(wèn)不了外部網(wǎng)絡(luò)問(wèn)題

 更新時(shí)間:2024年11月12日 10:48:51   作者:一只牛博  
介紹了Docker?bridge網(wǎng)絡(luò)的工作原理,包括虛擬網(wǎng)橋的創(chuàng)建、容器的IP地址分配、IP轉(zhuǎn)發(fā)的作用以及NAT的配置,通過(guò)配置IP轉(zhuǎn)發(fā)和NAT規(guī)則,Docker能夠?qū)崿F(xiàn)容器與外部網(wǎng)絡(luò)之間的通信,文章還提供了解決某個(gè)具體問(wèn)題的步驟

前戲

事情的起因是我在服務(wù)器A中部署了一個(gè)用docker實(shí)現(xiàn)的java項(xiàng)目,這個(gè)項(xiàng)目中依賴于另一臺(tái)服務(wù)器中的elasticsearch,但是一直顯示無(wú)法連接,

進(jìn)入容器ping一下試試看

很顯然,網(wǎng)絡(luò)不通

docker中的bridge網(wǎng)絡(luò)詳解

在 Docker 中,bridge 網(wǎng)絡(luò) 是最常用的網(wǎng)絡(luò)模式之一,它通過(guò)虛擬網(wǎng)橋(如默認(rèn)的 docker0)來(lái)連接容器。

容器之間以及容器與外部網(wǎng)絡(luò)的通信,需要依賴 Linux 主機(jī)的 IP 轉(zhuǎn)發(fā)功能。

這是因?yàn)?Docker 網(wǎng)絡(luò)模型本質(zhì)上是通過(guò) Linux 的虛擬網(wǎng)絡(luò)設(shè)備、iptables 和 IP 轉(zhuǎn)發(fā)等內(nèi)核功能來(lái)實(shí)現(xiàn)的。

1. 什么是 Docker bridge 網(wǎng)絡(luò)?

當(dāng) Docker 啟動(dòng)時(shí),它會(huì)自動(dòng)創(chuàng)建一個(gè)名為 docker0 的虛擬網(wǎng)橋,類似于一個(gè)軟件交換機(jī)。所有使用 bridge 模式運(yùn)行的容器,都會(huì)自動(dòng)連接到 docker0 上,并被分配一個(gè) IP 地址。

2. IP 轉(zhuǎn)發(fā)的作用

當(dāng)你在 Docker 中使用 bridge 網(wǎng)絡(luò)時(shí),IP 轉(zhuǎn)發(fā) 起到以下關(guān)鍵作用:

  • 容器與外部網(wǎng)絡(luò)的通信:當(dāng)容器 A(在 docker0 網(wǎng)絡(luò)中)想要訪問(wèn)外部網(wǎng)絡(luò)(比如互聯(lián)網(wǎng)或其他主機(jī))時(shí),數(shù)據(jù)包會(huì)通過(guò) docker0 虛擬網(wǎng)橋被發(fā)送到主機(jī)的網(wǎng)絡(luò)接口(如 eth0)。在這種情況下,主機(jī)必須啟用 IP 轉(zhuǎn)發(fā)功能,才能將這些數(shù)據(jù)包從 docker0 轉(zhuǎn)發(fā)到外部網(wǎng)絡(luò)。
  • 容器之間的通信:容器 A 和容器 B 在 docker0 虛擬網(wǎng)橋上被分配了不同的 IP 地址,Linux 需要啟用 IP 轉(zhuǎn)發(fā)來(lái)在它們之間路由數(shù)據(jù)包。例如,容器 A 的 IP 地址為 172.17.0.2,容器 B 的 IP 地址為 172.17.0.3,如果 A 需要與 B 通信,數(shù)據(jù)包需要通過(guò) docker0 網(wǎng)橋進(jìn)行轉(zhuǎn)發(fā)。
  • NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)和外部訪問(wèn):為了使容器能夠訪問(wèn)外部網(wǎng)絡(luò)(如互聯(lián)網(wǎng)),Docker 通常會(huì)通過(guò) NAT 來(lái)隱藏容器的內(nèi)部 IP 地址(例如 172.17.0.x),這需要主機(jī)具有 IP 轉(zhuǎn)發(fā)能力。Docker 會(huì)通過(guò) iptables 將內(nèi)部容器網(wǎng)絡(luò)的流量進(jìn)行 SNAT(源地址轉(zhuǎn)換),并轉(zhuǎn)發(fā)到主機(jī)的物理網(wǎng)絡(luò)接口上。

3. IP 轉(zhuǎn)發(fā)如何幫助 Docker 網(wǎng)絡(luò)工作?

在 Linux 主機(jī)中,IP 轉(zhuǎn)發(fā)的配置位于 /proc/sys/net/ipv4/ip_forward。如果該值為 0,則表示 IP 轉(zhuǎn)發(fā)被禁用;如果該值為 1,則表示啟用。Docker 依賴這個(gè)設(shè)置來(lái)實(shí)現(xiàn)容器與外部網(wǎng)絡(luò)之間的通信。

當(dāng) Docker 創(chuàng)建 bridge 網(wǎng)絡(luò)時(shí),內(nèi)部機(jī)制包括以下幾步:

  • 創(chuàng)建虛擬網(wǎng)橋(如 docker0**)**。
  • 給每個(gè)連接到該網(wǎng)橋的容器分配一個(gè)虛擬網(wǎng)卡(veth 設(shè)備)。
  • 配置 IP 轉(zhuǎn)發(fā):確保 Linux 主機(jī)啟用了 IP 轉(zhuǎn)發(fā),以便將不同網(wǎng)絡(luò)接口之間的數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)。

Docker 通過(guò)這種方式,將每個(gè)容器的 veth 設(shè)備與虛擬網(wǎng)橋 docker0 連接,形成一個(gè)橋接網(wǎng)絡(luò)。Linux 內(nèi)核的 IP 轉(zhuǎn)發(fā)機(jī)制則負(fù)責(zé)管理這些網(wǎng)絡(luò)接口之間的通信。

4. 配置 IP 轉(zhuǎn)發(fā)的步驟

在 Docker 主機(jī)上啟用 IP 轉(zhuǎn)發(fā)通常是自動(dòng)的,但如果你需要手動(dòng)啟用或進(jìn)行故障排查,可以參考以下步驟:

  • 檢查 IP 轉(zhuǎn)發(fā)是否啟用cat /proc/sys/net/ipv4/ip_forward
  • 臨時(shí)啟用 IP 轉(zhuǎn)發(fā)(在系統(tǒng)重啟前有效):echo 1 > /proc/sys/net/ipv4/ip_forward
  • 永久啟用 IP 轉(zhuǎn)發(fā):編輯 /etc/sysctl.conf 文件,添加或修改以下內(nèi)容:net.ipv4.ip_forward = 1

然后運(yùn)行以下命令以應(yīng)用:sysctl -p

5. bridge 網(wǎng)絡(luò)中的 NAT 和 iptables

為了使容器能夠訪問(wèn)外部網(wǎng)絡(luò),Docker 會(huì)自動(dòng)配置 NAT 規(guī)則。Docker 默認(rèn)會(huì)在 docker0 網(wǎng)橋上創(chuàng)建 iptables 規(guī)則,使得從內(nèi)部網(wǎng)絡(luò)發(fā)往外部的流量進(jìn)行 SNAT(源地址轉(zhuǎn)換)。

這就意味著,來(lái)自容器的請(qǐng)求會(huì)以主機(jī)的 IP 地址作為源 IP 發(fā)往外部網(wǎng)絡(luò),這樣容器之間和容器與外部網(wǎng)絡(luò)之間的通信才得以實(shí)現(xiàn)。

例如:

?Docker 會(huì)創(chuàng)建如下的 iptables 規(guī)則來(lái)進(jìn)行 NAT:

iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

解決

可以認(rèn)真看一下上面的,里面就有解決方案,我這里僅臨時(shí)展示解決一下

執(zhí)行

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

加餐

明明服務(wù)器A可以telnet服務(wù)器B的es服務(wù),但是還會(huì)報(bào)錯(cuò)

在服務(wù)器B進(jìn)行抓包可以看到如下

顯示被拒絕了,這個(gè)情況我是感到很無(wú)語(yǔ)的

進(jìn)入服務(wù)器A中的java容器去ping一下服務(wù)器B的地址,你會(huì)發(fā)現(xiàn)它好了

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea使用docker插件實(shí)現(xiàn)一鍵自動(dòng)化部署

    idea使用docker插件實(shí)現(xiàn)一鍵自動(dòng)化部署

    本文主要介紹了idea使用docker插件實(shí)現(xiàn)一鍵自動(dòng)化部署,文中通過(guò)圖文介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Docker load之后鏡像名字為none問(wèn)題解決方法

    Docker load之后鏡像名字為none問(wèn)題解決方法

    這篇文章主要介紹了Docker load之后鏡像名字為none問(wèn)題解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 微信小程序Docker+Nginx環(huán)境配置業(yè)務(wù)域名驗(yàn)證文件的操作方法

    微信小程序Docker+Nginx環(huán)境配置業(yè)務(wù)域名驗(yàn)證文件的操作方法

    本文介紹了如何在DockerCompose+Nginx環(huán)境下配置并訪問(wèn)靜態(tài)驗(yàn)證文件,首先下載驗(yàn)證文件并將其掛載到容器中,然后修改Nginx配置文件使其能夠正確返回請(qǐng)求路徑下的靜態(tài)文件,最后,測(cè)試訪問(wèn)驗(yàn)證文件并提交業(yè)務(wù)域名,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Mysql 在 Docker 中的時(shí)區(qū)問(wèn)題記錄

    Mysql 在 Docker 中的時(shí)區(qū)問(wèn)題記錄

    Mysql 時(shí)區(qū)一般是跟著系統(tǒng)走的,而在 Docker 中安裝 Mysql 默認(rèn)時(shí)區(qū)是 UTC,下面介紹,創(chuàng)建Docker容器前、后,分別如何設(shè)置 Mysql 時(shí)區(qū),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 使用docker?compose部署emqx集群的示例

    使用docker?compose部署emqx集群的示例

    這篇文章主要介紹了使用docker compose部署emqx集群,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 使用 Docker-compose 搭建lnmp的詳細(xì)過(guò)程

    使用 Docker-compose 搭建lnmp的詳細(xì)過(guò)程

    Docker-Compose項(xiàng)目是Docker官方的開(kāi)源項(xiàng)目,負(fù)責(zé)實(shí)現(xiàn)對(duì)Docker容器集群的快速編排,這篇文章主要介紹了使用 Docker-compose 搭建lnmp,需要的朋友可以參考下
    2023-06-06
  • docker容器非root用戶提權(quán)的問(wèn)題解決

    docker容器非root用戶提權(quán)的問(wèn)題解決

    本文主要介紹了docker容器非root用戶提權(quán)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • docker封裝鏡像及優(yōu)化方式

    docker封裝鏡像及優(yōu)化方式

    這篇文章主要介紹了docker封裝鏡像及優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • CentOS版本問(wèn)題安裝Docker報(bào)錯(cuò)的解決方案

    CentOS版本問(wèn)題安裝Docker報(bào)錯(cuò)的解決方案

    今天小編就為大家分享一篇關(guān)于CentOS版本問(wèn)題安裝Docker報(bào)錯(cuò)的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 淺談Docker Desktop for Linux和Docker Engine區(qū)別

    淺談Docker Desktop for Linux和Docker Engine

    本文主要介紹了Docker Desktop for Linux和Docker Engine區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10

最新評(píng)論