CentOS 7.9 上 docker 20.10,docker volume create 带 --driver local 和 type=nfs 参数时直接报 Error response from daemon: error while mounting volume,同时创建出来的卷在 docker volume ls 里是 dangling 状态。
一开始怀疑是「卷参数里的 o=addr 写法有误,驱动拼出来的挂载命令本身就是坏的」,查了一圈,方向不对。
真正麻烦的地方在于,几个原因的现象几乎一样。宿主机没装 nfs-utils,mount.nfs 这个辅助程序不存在。少数情况下是容器里跑的是 rootless 模式,挂载权限被限制在用户命名空间里。
还有一种情况,SELinux 拦住了挂载动作,audit 日志里有 denied 记录。
第一件事是确认宿主机能不能手工挂 NFS
mount -t nfs 10.0.0.8:/data /mnt && ls /mnt
补上缺失的 NFS 客户端工具
yum install -y nfs-utils && systemctl restart docker
随后按官方参数格式重建卷并验证
docker volume create --driver local --opt type=nfs --opt o=addr=10.0.0.8,rw --opt device=:/data nfsvol
剩下的就是挂进容器看目录是否可写
docker run --rm -v nfsvol:/mnt alpine touch /mnt/t && ls /mnt
改完先别撤,确认这几项。docker volume ls 里卷状态正常,容器内 /mnt 能看到 NFS 服务端的原有文件,写入测试文件成功且宿主机上也能看到。
提醒一点。NFS 卷在容器重启后不会自动重挂,服务端一断容器里就是 Stale file handle;关键业务更适合用 CSI 或者直接 bind 已挂载的目录。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
