最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前戲

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

進入容器ping一下試試看

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

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

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

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

這是因為 Docker 網(wǎng)絡模型本質上是通過 Linux 的虛擬網(wǎng)絡設備、iptables 和 IP 轉發(fā)等內核功能來實現(xiàn)的。

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

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

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

當你在 Docker 中使用 bridge 網(wǎng)絡時,IP 轉發(fā) 起到以下關鍵作用:

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

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

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

當 Docker 創(chuàng)建 bridge 網(wǎng)絡時,內部機制包括以下幾步:

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

Docker 通過這種方式,將每個容器的 veth 設備與虛擬網(wǎng)橋 docker0 連接,形成一個橋接網(wǎng)絡。Linux 內核的 IP 轉發(fā)機制則負責管理這些網(wǎng)絡接口之間的通信。

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

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

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

然后運行以下命令以應用:sysctl -p

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

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

這就意味著,來自容器的請求會以主機的 IP 地址作為源 IP 發(fā)往外部網(wǎng)絡,這樣容器之間和容器與外部網(wǎng)絡之間的通信才得以實現(xiàn)。

例如:

?Docker 會創(chuàng)建如下的 iptables 規(guī)則來進行 NAT:

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

解決

可以認真看一下上面的,里面就有解決方案,我這里僅臨時展示解決一下

執(zhí)行

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

加餐

明明服務器A可以telnet服務器B的es服務,但是還會報錯

在服務器B進行抓包可以看到如下

顯示被拒絕了,這個情況我是感到很無語的

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

總結

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

相關文章

  • Dockerfile文件詳細介紹

    Dockerfile文件詳細介紹

    Dockerfile 是一個文本文件,里面包含組裝新鏡像時用到的基礎鏡像和各種指令。使用dockerfile 文件來定義鏡像,然后運行鏡像,啟動容器。本文詳細介紹了Dockerfile文件,感興趣的小伙伴可以參考一下
    2023-04-04
  • docker交叉編譯工具鏈解讀

    docker交叉編譯工具鏈解讀

    使用Docker容器進行交叉編譯具有環(huán)境隔離、一致性、可移植性和簡化配置等優(yōu)勢,以下是一個示例的Dockerfile,用于創(chuàng)建一個包含C++11 ARM交叉編譯工具鏈的Docker容器,構建完成后,可以在容器中進行ARM交叉編譯
    2024-12-12
  • docker國內鏡像源配置及走代理設置小結

    docker國內鏡像源配置及走代理設置小結

    本文主要介紹了配置Docker國內鏡像源及代理設置,以加快鏡像拉取速度,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • Docker搭建SVN服務器的實現(xiàn)步驟

    Docker搭建SVN服務器的實現(xiàn)步驟

    本文主要介紹了Docker搭建SVN服務器的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11
  • 詳解Centos7 下建立 Docker 橋接網(wǎng)絡

    詳解Centos7 下建立 Docker 橋接網(wǎng)絡

    本篇文章主要介紹了詳解Centos7 下建立 Docker 橋接網(wǎng)絡,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Docker容器網(wǎng)絡不通排查指南

    Docker容器網(wǎng)絡不通排查指南

    本文主要介紹了Docker容器網(wǎng)絡不通排查指南,包括容器無法訪問外網(wǎng)、容器間網(wǎng)絡不通、端口映射不生效、DNS解析失敗以及跨主機容器通信等常見問題的診斷方法,感興趣的可以了解一下
    2026-02-02
  • docker搭建minio服務器,解決內網(wǎng)穿透后外網(wǎng)無法訪問

    docker搭建minio服務器,解決內網(wǎng)穿透后外網(wǎng)無法訪問

    這篇文章主要介紹了docker搭建minio服務器,解決內網(wǎng)穿透后外網(wǎng)無法訪問的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • mac系統(tǒng)使用docker搭建nacos(親測有效)

    mac系統(tǒng)使用docker搭建nacos(親測有效)

    本文主要介紹了mac系統(tǒng)使用docker搭建nacos,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-08-08
  • 在Centos7 中更改Docker默認鏡像和容器的位置

    在Centos7 中更改Docker默認鏡像和容器的位置

    這篇文章主要介紹了在Centos7 下更改Docker默認鏡像和容器的位置,需要的朋友可以參考下
    2017-05-05
  • Docker部署springboot項目實例解析

    Docker部署springboot項目實例解析

    這篇文章主要介紹了docker部署springboot項目實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10

最新評論

连州市| 洮南市| 大同市| 略阳县| 清原| 运城市| 沽源县| 永年县| 孟村| 峨眉山市| 北川| 宾川县| 炎陵县| 凌海市| 宜兰市| 合江县| 洞头县| 余江县| 城市| 安乡县| 榆社县| 普宁市| 吉林省| 彭州市| 海阳市| 麦盖提县| 石门县| 灵寿县| 景德镇市| 舞钢市| 哈巴河县| 赣州市| 康定县| 延庆县| 淮南市| 巴南区| 台东县| 孙吴县| 霞浦县| 益阳市| 罗定市|