我懵了,docker容器访问不了外部网络

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

🎏:你只管努力,剩下的交给时间

🏠 :小破站

我懵了,docker容器访问不了外部网络

    • 前戏
    • docker中的bridge网络详解
    • 解决
    • 加餐

前戏

事情的起因是我在服务器A中部署了一个用docker实现的java项目,这个项目中依赖于另一台服务器中的elasticsearch,但是一直显示无法连接,

image-20241029160233494

进入容器ping一下试试看

image-20241029160418982

很显然,网络不通

docker中的bridge网络详解

在 Docker 中,bridge 网络 是最常用的网络模式之一,它通过虚拟网桥(如默认的 docker0)来连接容器。容器之间以及容器与外部网络的通信,需要依赖 Linux 主机的 IP 转发功能。这是因为 Docker 网络模型本质上是通过 Linux 的虚拟网络设备、iptables 和 IP 转发等内核功能来实现的。

1. 什么是 Docker bridge 网络?

当 Docker 启动时,它会自动创建一个名为 docker0 的虚拟网桥,类似于一个软件交换机。所有使用 bridge 模式运行的容器,都会自动连接到 docker0 上,并被分配一个 IP 地址。

2. IP 转发的作用

当你在 Docker 中使用 bridge 网络时,IP 转发 起到以下关键作用:

​ 1. 容器与外部网络的通信:当容器 A(在 docker0 网络中)想要访问外部网络(比如互联网或其他主机)时,数据包会通过 docker0 虚拟网桥被发送到主机的网络接口(如 eth0)。在这种情况下,主机必须启用 IP 转发功能,才能将这些数据包从 docker0 转发到外部网络。

​ 2. 容器之间的通信:容器 A 和容器 B 在 docker0 虚拟网桥上被分配了不同的 IP 地址,Linux 需要启用 IP 转发来在它们之间路由数据包。例如,容器 A 的 IP 地址为 172.17.0.2,容器 B 的 IP 地址为 172.17.0.3,如果 A 需要与 B 通信,数据包需要通过 docker0 网桥进行转发。

​ 3. NAT(网络地址转换)和外部访问:为了使容器能够访问外部网络(如互联网),Docker 通常会通过 NAT 来隐藏容器的内部 IP 地址(例如 172.17.0.x),这需要主机具有 IP 转发能力。Docker 会通过 iptables 将内部容器网络的流量进行 SNAT(源地址转换),并转发到主机的物理网络接口上。

3. IP 转发如何帮助 Docker 网络工作?

在 Linux 主机中,IP 转发的配置位于 /proc/sys/net/ipv4/ip_forward。如果该值为 0,则表示 IP 转发被禁用;如果该值为 1,则表示启用。Docker 依赖这个设置来实现容器与外部网络之间的通信。

当 Docker 创建 bridge 网络时,内部机制包括以下几步:

​ 1. 创建虚拟网桥(如 docker0**)**。

​ 2. 给每个连接到该网桥的容器分配一个虚拟网卡(veth 设备)

​ 3. 配置 IP 转发:确保 Linux 主机启用了 IP 转发,以便将不同网络接口之间的数据包进行转发。

Docker 通过这种方式,将每个容器的 veth 设备与虚拟网桥 docker0 连接,形成一个桥接网络。Linux 内核的 IP 转发机制则负责管理这些网络接口之间的通信。

4. 配置 IP 转发的步骤

在 Docker 主机上启用 IP 转发通常是自动的,但如果你需要手动启用或进行故障排查,可以参考以下步骤:

  1. 检查 IP 转发是否启用cat /proc/sys/net/ipv4/ip_forward

​ 2. 临时启用 IP 转发(在系统重启前有效):echo 1 > /proc/sys/net/ipv4/ip_forward

​ 3. 永久启用 IP 转发:编辑 /etc/sysctl.conf 文件,添加或修改以下内容:net.ipv4.ip_forward = 1

然后运行以下命令以应用:sysctl -p

5. bridge 网络中的 NAT 和 iptables

为了使容器能够访问外部网络,Docker 会自动配置 NAT 规则。Docker 默认会在 docker0 网桥上创建 iptables 规则,使得从内部网络发往外部的流量进行 SNAT(源地址转换)。这就意味着,来自容器的请求会以主机的 IP 地址作为源 IP 发往外部网络,这样容器之间和容器与外部网络之间的通信才得以实现。

例如:

​ • Docker 会创建如下的 iptables 规则来进行 NAT:iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

解决

可以认真看一下上面的,里面就有解决方案,我这里仅临时展示解决一下

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

image-20241029162317662

加餐

明明服务器A可以telnet服务器B的es服务,但是还会报错

image-20241029162623885

在服务器B进行抓包可以看到如下

抓包

显示被拒绝了,这个情况我是感到很无语的

进入服务器A中的java容器去ping一下服务器B的地址,你会发现它好了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5138.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

rocketMq学习

RocketMq学习 首先需要了解一下Rocketmq。与市面上常见的消息中间件的区别 工作原理图: 从这张图我们可以看到,rocketmq几个关键的指标 producer、NameServer、broker、consumer windows下安装RocketMq 并使用图形化界面进行管理 1、RocketMq官网下…

Java类和对象(下篇)

今天接着学习类和对象(苦笑)(苦笑)(苦笑) 1. 封装 1.1 封装的概念 面向对象程序三大特性:封装、继承、多态。 而类和对象阶段,主要研究的就是封装特性。 何为封装呢?简单来说就是套壳屏蔽细节。 举例:对于计算机使用者而言&am…

Docker在CentOS上的安装与配置

前言 随着云计算和微服务架构的兴起,Docker作为一种轻量级的容器技术,已经成为现代软件开发和运维中的重要工具。本文旨在为初学者提供一份详尽的指南,帮助他们在CentOS系统上安装和配置Docker及相关组件,如Docker Compose和私有…

视频智能分析平台LiteAIServer入侵检测算法平台部署行人入侵检测算法:智能安防的新利器

在当今数字化时代,安全防护成为了社会各界高度关注的重要议题。随着人工智能技术的不断发展,视频智能分析平台LiteAIServer 行人入侵检测算法应运而生,为安防领域带来了全新的突破与变革。 视频智能分析平台LiteAIServer 行人入侵检测算法是基…

Java AOT 快速入门

1、编译类型介绍 AOT: Ahead-of-time (提前编译):程序执行前,全部被编译成机器码 JIT:Just in time(即时编译):程序边编译,边运行。 编译:源代码->.class文件->机器码 2、A…

思维导图工具有哪些?10款思维导图特色介绍

电脑的普及,互联网的便捷。使我们平时工作、学习等场景下,常常离不开思维导图的辅助。思维导图是可以让我们所需要介绍的知识点以图文形式结合,展示出来。帮助我们方便理解。因此,一款好的思维导图工具,能让我们制作的…

夸克获评多个AI产品奖项 升级“AI搜题”让用户解新题、难题更高效

日前,在“第9届榜样教育年度盛典”上,夸克“AI搜题” 凭借在AI产品创新以及“灵知”学习大模型上的卓越表现,荣获“2024技术突破教育产品”奖。夸克持续加码在学习产品和技术上的投入,将助力用户进一步提升学习能力与效率。 从去年…

自动化测试中使用Pytest Fixture?推荐10种常见用法!

Pytest 是一个功能强大的 Python 测试框架,其中的Fixture 是 Pytest 中的一个重要功能。它允许你设置一些特定的测试环境或准备测试数据,这些环境和数据可以在多个测试用例中重复使用。通过使用fixture,你可以避免在每个测试函数中编写重复的…

Java 调用淘宝 API 获取商品页面数据示例

在 Java 开发中&#xff0c;我们同样可以调用淘宝 API 来获取商品页面数据。以下是一个用 Java 实现的示例。 一、准备工作 1.引入相关依赖&#xff0c;这里我们使用 Apache HttpClient 来发送 HTTP 请求。可以在项目的 pom.xml 文件中添加以下依赖&#xff1a; <dependenc…

【网络】数据链路层

目录 以太网 以太网的帧格式 MSS 交换机 MTU对UDP的影响 ARP协议 数据链路层是软件层的最底层协议&#xff0c;它的下面就是物理层&#xff0c;那么下面我们就来介绍一下它负责在网络通信中完成什么工作 我们前面说的IP协议是解决如何进行跨网络转发的&#xff0c;也就是…

三维测量与建模笔记 - 3.2 直接线性变换法标定DLT

DLT - Direct Linear Transform 上图中&#xff0c;透视成像对应的公式是共线方程&#xff0c;可以参考以下链接&#xff1a; https://zhuanlan.zhihu.com/p/101549821https://zhuanlan.zhihu.com/p/101549821 对于标定来说&#xff0c;需要找到。已知量是。 (u,v)是…

语音识别中的RPM技术:原理、应用与发展趋势

目录 引言1. RPM技术的基本原理2. RPM的应用领域3. RPM技术的挑战与发展趋势4. 总结 引言 在语音识别和音频处理领域&#xff0c;RPM&#xff08;Recurrent Phase Model&#xff0c;递归相位模型&#xff09;技术正逐渐崭露头角。它作为一种创新的信号处理方法&#xff0c;通过…

C语言程序的机器表示(逆向+函数调用栈详解版)

C语言程序的机器表示 1 基本数据类型 在Windows系统中&#xff0c;通常一个字等于两个字节&#xff0c;在32位程序和64位程序&#xff0c;在处理数据时&#xff0c;通常对8&#xff0c;4&#xff0c;2和1字节数据进行处理 x86使用的是浮点寄存器&#xff0c;Intel提供了8个128…

Linux 系统目录结构

1.ls /查看目录 &#xff08;1&#xff09;/bin&#xff1a;bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 &#xff08;2&#xff09;/boot&#xff1a;存放启动 Linux 使用的一些核心文件&#xff0c;包括一些连接文件以及镜像文件。 &#xff0…

基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真。本系统包括PV模块&#xff0c;电池模块&#xff0c;电池控制器模块&#xff0c;MPPT模块&#xff0c;PWM模…

matlab图像处理(1)

注意&#xff1a; 读取图像文件时需若图像不在工程目录文件下&#xff0c;需在代码中表明其其他路径的具体位置及名称

1.3 自然语言处理的应用

自然语言处理&#xff08;NLP&#xff09;在多个领域有广泛应用&#xff0c;如自动文摘、机器翻译、情感分析等。本实战将通过NLTK库&#xff0c;演示文本预处理的关键技术&#xff0c;包括小写转换、去噪、文本规范化、词干提取、词形还原、标记化以及删除停止词。这些技术为构…

更改lvgl图片的分辨率(减少像素)达到减小内存占用的目的

lvgl的内存占比过大&#xff0c;更改图片的分辨率&#xff08;减少像素&#xff09;达到减小内存占用的目的&#xff0c;可以用更多的空间去开发其他的功能 -- 由于lvgl中图片占的内存过大&#xff0c;所以需要更改图片的分辨率&#xff08;降低像素的方式&#xff09; --注意…

斗破QT编程入门系列之一:认识Qt:初步使用(四星斗师)

斗破Qt目录&#xff1a; 斗破Qt编程入门系列之前言&#xff1a;认识Qt&#xff1a;Qt的获取与安装&#xff08;四星斗师&#xff09; 斗破QT编程入门系列之一&#xff1a;认识Qt&#xff1a;初步使用&#xff08;四星斗师&#xff09; 参考书籍 《Qt5.9 C开发指南》 斗破观…

练习LabVIEW第四十二题

学习目标&#xff1a; 使用labview编写一个用户确认界面&#xff1a; 我们在程序中赋予5个人的账号密码&#xff0c;账号使用人名&#xff0c;密码随便&#xff0c;并规定相关权限。访问权限要在前面板显示&#xff0c;并且访问成功与否也要有显示。 开始编写&#xff1a; 前…