宿主机无法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)