zoukankan      html  css  js  c++  java
  • 挂载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服务器,作为服务器端。
    详细搭建链接

  • 相关阅读:
    UE4 Couldn't find target rules file for target
    ue4 源码编译 虚拟内存不足 堆限制
    Windows RawInputPluginForUE4(2)
    maven的用法
    svn出现subclipse不兼容或不存在
    cglib
    Spring中bean中scope属性的意义
    org.springframework.beans.NotWritablePropertyException: Invalid property
    sql server 中的存储过程
    如何将数据库文件.mdf导入/恢复到SQL_Server2000
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/15188493.html
Copyright © 2011-2022 走看看