微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

挂载nfs网络共享目录到本地目录报错

背景:nfs服务器(172.17.0.16),nfs客户端都是docker容器

报错内容如下:

mount 172.17.0.16:/share /data/share
Job for rpc-statd.service Failed because a timeout was exceeded.
See "systemctl status rpc-statd.service" and "journalctl -xe" for details.
mount.nfs: mounting 172.17.0.16:/share Failed, reason given by server: No such file or directory

猜想1:可能是和nfs镜像所在的系统版本有关,于是测试了centos8,centos7,都没用。

猜想2:是nfs服务器端容器的问题,容器的部分组件未启动或被精简掉了。
测试2:docker pull专门针对nfs共享的镜像namazu510/nfs-server。然后通过该镜像创建并运行容器,作为nfs服务器端:docker run -dti --name node10 --hostname node10 --privileged=true -v /usr/apps/:/usr/apps/ -p :9010:80 namazu510/nfs-server /sbin/init
node10的IP是172.17.0.2。

猜想3:也可能和IP别名有关,因为nfs客户端和服务器端都是采用的IP别名,相互之间用IP别名通信(原因是容器中很难固定成静态IP,用了个偷懒的办法)。
测试3:取消别名再测试,没用。

猜想4:也可能和容器启动时执行的命令有关,将/sbin/init 改为 bash 试试,没用。
测试4:docker run -dti --name node16 --hostname node16 --privileged=true -v /usr/apps/:/usr/apps/ -p :9116:80 centos7-Nginx-custom:v3.0 bash ,创建并运行nfs服务器端的容器,使用bash作为1号进程,不过这样的话,systemctl等命令都无法使用,根本行不通。

猜想5:和容器本身的局限性有关,也是网上查到一个资料说容器中的nfs是要依赖宿主机的内核的,估计容器很难执行mount。
(网上的资料摘录:问题出在docker-machine上.如果要使用nfs挂载,则需要在机器本身运行modprobe nfs,而不是在容器中运行.容器使用机器的内核.与modprobe nfs和nfs服务器相同。)
测试5-1:在lenovo实体机上测试,没问题。
lenovo实体机上装nfs服务器端并启动,并设置好共享文件夹,在lenovo中的docker容器内安装nfs-utils,然后不用启动nfs,直接mount lenovo的IP:/share /data/share,成功。
测试5-2:容器nfs客户端,能mount到asus实体机上的nfs服务端共享文件夹。

最终得出结论,在容器中很难配置成功NFS服务器!
最终方法:在asus实体机中搭建nfs服务器,作为服务器端。
详细搭建链接

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐