在 CentOS 上 overlay(通常是 Docker overlay 网络或 overlayfs)出现“丢包”,原因和排查方向取决于你说的 overlay 是哪一层。下面按常见场景分别说明。
Docker 的 overlay 网络用于跨主机容器通信(基于 VXLAN)。
Overlay 依赖:
问题:
检查:
firewall-cmd --list-all
iptables -S | grep 4789
解决:
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --reload
VXLAN 封装会 增加 50 字节。
如果宿主机 MTU 是 1500,容器 overlay 网络 MTU 没调小,就会:
检查:
ip link show docker_gwbridge
ip addr show <overlay_if>
解决(Docker daemon.json):
{
"mtu": 1450
}
重启 docker:
systemctl restart docker
Overlay 本质是多跳网络:
验证:
ping -s 1400 <peer_host>
mtr <peer_host>
CentOS 7 + 老内核常见问题:
检查:
uname -a
docker version
dmesg | grep -i drop
建议:
dmesg | grep conntrack
现象:
解决:
sysctl -w net.netfilter.nf_conntrack_max=1048576
如果你说的是 overlayfs(容器镜像层),它不会“丢网络包”,但可能有:
不是丢包,是 COW 行为
df -i
df -h /var/lib/docker
# 1. 看丢包
ip -s link
# 2. 看 docker 网络
docker network inspect <overlay_net>
# 3. 看内核
dmesg | tail -n 50
# 4. 看防火墙
iptables -S
# 5. 看 MTU
ip addr | grep mtu
请告诉我:
我可以直接给你 对应配置文件和命令。