Docker容器ping不通外网问题排查及解决

Docker容器ping不通外网问题排查及解决

解决方案在最下面,不看过程的可直接拉到最下面。

一台虚拟机里突然遇到docker容器一直访问外网失败,网上看到这个解决方案,这边记录一下。

首先需要明确docker的网桥模式,网桥工作在二层(OSI堆栈),是通用网络设备的一种,可以设置IP地址。有了IP地址,Linux便可通过路由表或IP表,在网络层定位网桥,这就相当于有了一个虚拟网卡,即docker0。docker0默认的地址划分:IP(127.17.42.1/16),在启动容器时,docker会在宿主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备,容器启动时,Docker引擎将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在宿主机中,以veth***这样类似的名字命名,并将这个网络设备加入到docker0网桥中,可以通过brctl show命令查看,从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。

一、首先检查宿主机的网络配置

1.检查网桥brctl sho

[root@localhost ~]# brctl show
bridge name     bridge id               STP enabled     interfaces  
docker0         8000.f229f45b3df2       no              vethaef304e  

2.检查ip

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  inet 127.0.0.1/8 scope host lo  valid_lft forever preferred_lft forever  inet6 ::1/128 scope host   valid_lft forever preferred_lft forever  
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP group default qlen 1000  link/ether fa:16:3e:5d:75:0a brd ff:ff:ff:ff:ff:ff  inet 10.164.99.214/20 brd 10.164.111.255 scope global dynamic eth0  valid_lft 69570sec preferred_lft 69570sec  inet6 fe80::f816:3eff:fe5d:750a/64 scope link   valid_lft forever preferred_lft forever  
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000  link/ether fa:16:3e:45:a9:5e brd ff:ff:ff:ff:ff:ff  inet 10.122.76.71/24 brd 10.122.76.255 scope global dynamic eth1  valid_lft 65709sec preferred_lft 65709sec  inet6 fe80::f816:3eff:fe45:a95e/64 scope link   valid_lft forever preferred_lft forever  
128: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default   link/ether f2:29:f4:5b:3d:f2 brd ff:ff:ff:ff:ff:ff  inet 172.17.10.1/24 brd 172.17.10.255 scope global docker0  valid_lft forever preferred_lft forever  inet6 fe80::e03c:c3ff:fe90:1cee/64 scope link   valid_lft forever preferred_lft forever  
130: vethaef304e@if129: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default   link/ether f2:29:f4:5b:3d:f2 brd ff:ff:ff:ff:ff:ff link-netnsid 0  inet6 fe80::f029:f4ff:fe5b:3df2/64 scope link   valid_lft forever preferred_lft forever

可以看到docker创建的虚拟网卡docker0的网段为172.17.10.1/24

3.查看路由: ip route

[root@localhost ~]# ip route
10.160.146.0/23 via 10.122.72.1 dev eth1   
172.16.0.0/12 via 10.122.72.1 dev eth1   
172.17.0.0/20 via 10.122.72.1 dev eth1   
172.17.10.0/24 dev docker0 proto kernel scope link src 172.17.10.1 

即172.17.10.0/24网段的包均通过docker0网桥来转发.

二、再来查看容器的ip: docker exec -it <容器名称> ip a

[root@localhost ~]# docker exec -it c_name ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  inet 127.0.0.1/8 scope host lo  valid_lft forever preferred_lft forever  
129: eth0@if130: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP   link/ether 02:42:ac:11:0a:02 brd ff:ff:ff:ff:ff:ff  inet 172.17.10.2/24 brd 172.17.10.255 scope global eth0  valid_lft forever preferred_lft forever  

可以看到虚拟网卡eth0的ip为172.17.10.2

1.查看容器内的路由: docker exec -it c_name ip route

[root@localhost ~]# docker exec -it c_name ip route
default via 172.17.10.1 dev eth0   
172.17.10.0/24 dev eth0 scope link  src 172.17.10.2 

由此可知172.17.10.0网段的包均走容器内的eth0,默认网关为172.17.10.1

2. 如果容器中无法ping通外网,首先查看能否ping通网关。如果网关都无法ping通,说明网桥或网段有问题。这里就可以用tcpdump来查看。比如监控上面第一步的网桥接口tcpdump -i vethaef304e -nn,正常的网络包应答如下:bash-4.4# ping -c 1 8.8.8.8

[root@localhost ~]#  tcpdump -i vethaef304e -nn  
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode  
listening on vethaef304e, link-type EN10MB (Ethernet), capture size 262144 bytes  
17:17:16.282976 IP 172.17.10.2 > 8.8.8.8: ICMP echo request, id 2304, seq 0, length 64  
17:17:16.325812 IP 8.8.8.8 > 172.17.10.2: ICMP echo reply, id 2304, seq 0, length 64  
17:17:21.297595 ARP, Request who-has 172.17.10.1 tell 172.17.10.2, length 28  
17:17:21.297656 ARP, Reply 172.17.10.1 is-at f2:29:f4:5b:3d:f2, length 28  

异常时就只有request who-has包,没有reply

三、问题解决

查看网桥,路由和ip均没发现问题,试试修改docker0的默认网段,居然成功了,步骤如下:

1.删除原有配置

service docker stop  
ip link set dev docker0 down  
brctl delbr docker0  
iptables -t nat -F POSTROUTING  

2.创建新的网桥

brctl addbr docker0  
ip addr add 172.17.10.1/24 dev docker0  
ip link set dev docker0 up  

3.修改docker配置,在/etc/docker/daemon.json中追加bip如下,注意json的格式,bip前面需要有,root@XXXXXX~# cat /etc/docker/daemon.json

vim /etc/docker/daemon.json
{"insecure-registries":["x.x.x"],"bip": "172.17.10.1/24"
}  

4.重启docker:
systemctl restart docker

[root@localhost ~]# systemctl  restart  docker

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 前端框架1

一、React 简介 &#xff08;一&#xff09;什么是 React React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开源并维护。它采用了组件化的开发思想&#xff0c;允许开发者将复杂的 UI 拆分成一个个独立、可复用的小组件&#xff0c;就如同搭积木一般&am…

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题 2024/11/28 16:17 缘起&#xff1a;中科创达的高通CM6125开发板的Android10的编译环境需要。 安装异常&#xff1a;rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ sudo apt-get install libwxgtk3.0-de…

大疆T100大载重吊运植保无人机技术详解

大疆T100作为一款大载重吊运植保无人机&#xff0c;融合了全新的AI和AR功能&#xff0c;旨在进一步提升安全性并满足喷洒、播撒、吊运等多种作业场景的需求。以下是对其技术的详细解析&#xff1a; 一、总体性能 最大起飞重量&#xff1a;149.9公斤 喷洒容量&#xff1a;75升…

arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)

arkUI&#xff1a;使用ArkUI实现用户信息的持久化管理与自动填充&#xff08;PersistentStorage&#xff09; 1 主要内容说明2 例子2.1 登录页2.1.1登陆页的相关说明2.1.1.1 持久化存储的初始化2.1.1.2 输入框2.1.1.3 记住密码选项2.1.1.4 登录按钮的逻辑2.1.1.5 注册跳转 2.1.…

腾讯云 AI 代码助手:单元测试应用实践

引言 在软件开发这一充满创造性的领域中&#xff0c;开发人员不仅要构建功能强大的软件&#xff0c;还要确保这些软件的稳定性和可靠性。然而&#xff0c;开发过程中并非所有任务都能激发创造力&#xff0c;有些甚至是重复且乏味的。其中&#xff0c;编写单元测试无疑是最令人…

1、Three.js开端准备环境

准备工作 从 CDN 导入 1.安装 VSCode 2.安装 Node.js 3.查看Three.js最新版本 4.如何cdn引入&#xff1a; https://cdn.jsdelivr.net/npm/threev版本号/build/three.module.js 例如&#xff1a;https://cdn.jsdelivr.net/npm/threev0.170.0/build/three.module.js 我们需要…

Python基础教程005:if和else语句的使用

文章目录 3.1 布尔类型和比较运算符3.2 if语句的基本格式3.3 if else语句 3.1 布尔类型和比较运算符 布尔类型&#xff1a; 真True假False 定义变量存储布尔类型数据据&#xff1a; 变量名称 布尔类型字面量 比较运算符&#xff1a; 运算符描述示例判断内容是否相等&…

for循环和while循环区别、特点、优势

结论&#xff1a;while循环的自由度更高 for循环&#xff1a; 可以看到&#xff0c;对于变量 i 的操作&#xff0c;只能有一句&#xff1a;i /* for 循环 */ function forLoop(n: number): number {let res 0;// 循环求和 1, 2, ..., n-1, nfor (let i 1; i < n; i) {r…

Python毕业设计选题:基于django+vue的校园影院售票系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 影院信息管理 电影类型管理 电影信息管理 系统…

[USACO1.5] 回文质数 Prime Palindromes

题目传送门 P1217 [USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数&#xff08;从左到右和从右到左是看一样的&#xff09;&#xff0c;所以 151 151 151 是回文质数。 写一个程序来找出范围 [ a , b ] ( 5 ≤ a < b ≤…

初窥 HTTP 缓存

引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…

Django 视图层

from django.shortcuts import render, HttpResponse, redirectfrom django.http import JsonResponse1. render: 渲染模板 def index(request):print(reverse(index))return render(request, "index.html")return render(request, index.html, context{name: lisi})…

简单介绍下 VitePress 中的 vp-doc 和 vp-raw

VitePress 是一个轻量级的静态网站生成器&#xff0c;专为快速构建文档网站而设计。它是基于 Vite 和 Vue 3 构建的&#xff0c;旨在提供快速的开发体验和高效的构建过程。 存在两个需要注意的点&#xff1a;vp-doc 和 vp-raw&#xff0c;它们代表了不同的 CSS 样式类和用途&a…

【数据结构】LinkedList与链表

LinkedList与链表 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3.链表面试题 【本节目标】 ArrayList的缺陷链表链表相关ojLinkedList的模拟实现LinkedList的使用ArrayList和LinkedList的区别 1. ArrayList的缺陷 上节课已经熟悉了ArrayList的使用&#xf…

Matrix Multiplication

lab要求如下&#xff1a;

Laravel8.5+微信小程序实现京东商城秒杀方案

一、商品秒杀涉及的知识点 鉴权策略封装掊口访问频次限制小程序设计页面防抖接口调用订单创建事务使用超卖防御 二、订单库存系统方案&#xff08;3种&#xff09; 下单减库存 优点是库存和订单的强一致性&#xff0c;商品不会卖超&#xff0c;但是可能导致恶意下单&#xff…

esp8266 编译、烧录环境搭建

一、准备 xtensa-lx106-elf-gcc8-4-0-esp-2020r3-win32下载&#xff1a;点击跳转 MSYS2 压缩包文件&#xff1a; 固件烧录工具&#xff1a;点击跳转 esp8266源码地址&#xff1a;点击跳转 二、搭建编译环境 1、在D盘创建一个ESP8266目录&#xff0c;解压MSYS2.zip到里面&a…

WEB攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用

CSRF构造工具&#xff0c;也可以用bp构造 选中要保存的请求&#xff0c;点击Generate HTML,生成带有添加用户请求的html文件&#xff0c;然后将构造的html放在网站上&#xff0c;生成访问地址&#xff0c;诱导管理员点击链接&#xff0c;就会添加用户 start Recording之后就会…

2-7 C函数指针与回调函数

前言&#xff1a; 对函数指针与回调函数知识回顾&#xff0c;仅供学习参考... 目录 前言&#xff1a; 1.0 函数指针 2.0 函数指针变量 3.0 函数指针与指针函数 4.0 函数指针类型 5.0 卡点 后记&#xff1a; 1.0 函数指针 函数指针&#xff0c;简单来说就是指向函数的指针…

代码设计:设计模式:应对变化

文章目录 概述1.拆分代码2.解耦3.扩展总结概述 代码的设计模式主要为了应对变化 三种代码设计中应对变化的方式 1.拆分代码 2.解耦 3.扩展 1.拆分代码 减小变化对代码的影响 需要拆分代码的几种情况 1.类或方法的代码量巨大,导致代码可读性降低 2.存在复杂的代码,如…