在 CentOS 上调试 Overlay 文件系统(常见于 Docker、Podman、或手动挂载 overlay),可以从 内核、挂载参数、Docker 存储、SELinux、dmesg 几个方向入手。下面给你一套实用调试思路 + 命令清单。
先搞清楚你用的是哪一种:
mount | grep overlay
常见形式:
overlay 或 overlay2overlay on /xxx type overlaycat /proc/mounts | grep overlay
典型输出:
overlay /var/lib/docker/overlay2/.../merged overlay rw,relatime,lowerdir=...,upperdir=...,workdir=... 0 0
重点检查:
lowerdir:只读层upperdir:可写层workdir:必须为空目录如果怀疑是 Docker 问题,先 手动挂载 overlay 验证:
mkdir -p /tmp/overlay/{lower,upper,work,merged}
mount -t overlay overlay \
-o lowerdir=/tmp/overlay/lower,upperdir=/tmp/overlay/upper,workdir=/tmp/overlay/work \
/tmp/overlay/merged
如果失败,直接看错误信息。
overlayfs: workdir is in-use
✅ 解决:
rm -rf /path/to/workdir/*
overlayfs: upperdir and workdir must reside under the same mount
✅ 解决:
df -h upperdir workdir
确保它们在同一挂载点。
getenforce
如果是 Enforcing:
setenforce 0
或给目录打标签:
chcon -Rt svirt_sandbox_file_t /var/lib/docker
lsmod | grep overlay
modprobe overlay
检查内核版本(建议 ≥ 3.10.0-693):
uname -r
docker info | grep -i storage
建议:
overlay2overlay2如果不是:
vim /etc/docker/daemon.json
{
"storage-driver": "overlay2"
}
然后:
systemctl restart docker
ls -l /var/lib/docker/overlay2
查看某容器的层:
docker inspect <container_id> | grep -A 10 UpperDir
dmesg -T | grep -i overlay
常见错误:
overlayfs: failed to resolveoverlayfs: invalid argumentoverlayfs: missing workdir# 查看文件来自哪一层
ls -i file
find /var/lib/docker/overlay2 -inum <inode>
# 跟踪系统调用
strace -f -e mount docker run ...
dmesg 是否有 overlay 报错workdir 是否为空upperdir/workdir 是否同 FS你可以直接贴:
dmesg | tail -30
mount | grep overlay
docker info