宿主机无法ping通容器的问题小记

1 环境记录

虚拟机,centos7,内核版本:kernel 3.10.0-327.el7.x86_64

2问题描述

通过yum 安装docker,状态正常,运行容器,能够获取地址,宿主机ping 网桥网关能通,但是ping容器地址不通。

3解决过程

尝试关闭防火墙或者设置防火墙允许,配置ip转发net.ipv4.ip_forward=1,但是依然无法ping通容器地址。

4最终解决

升级内核

根据一些文章提示,可能是由于kernerl的bridge.io驱动异常,docker0无法抓发数据包,也就是bridge.io的模块加载失败所致,

尝试升级kernel

4.1.直接自动升级,运行yum update

4.2.手动升级

4.2.1 下载kernel文件

官方地址 https://elrepo.org/linux/kernel/el7/x86_64/RPMS/

wget  https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.204-1.el7.elrepo.x86_64.rpm

wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.204-1.el7.elrepo.x86_64.rpm

4.2.2安装

yum install -y kernel-lt-5.4.204-1.el7.elrepo.x86_64.rpm
yum install -y     kernel-lt-devel-5.4.204-1.el7.elrepo.x86_64.rpm
查看内核位置 安装后一般在位置0
awk
-F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg

4.2.3修改内核启动该顺序

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
#GRUB_DEFAULT=saved  默认状态
GRUB_DEFAULT=0  #修改新内核对应的位置
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

4.2.4重新生成grub 配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

4.2.5重启服务器

当系统内核升级后,宿主机可以ping通容器的地址。

 

4.3 升级内核方式2

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 设置开机从新内核启动
grub2-set-default 0

安装内核源文件(可选,在升级完内核并重启机器后执行):

# yum erase kernel-headers
yum --enablerepo=elrepo-kernel install kernel-lt-devel-$(uname -r) kernel-lt-headers-$(uname -r)

 

posted @ 2022-07-07 13:30  彦祚  阅读(670)  评论(0编辑  收藏  举报