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服务器,作为服务器端。
    详细搭建链接

  • 相关阅读:
    事务的隔离级别
    常用linux命令
    cpu.load avg和cpu使用率的区别
    【Leetcode】55. Jump Game
    【Leetcode】322. coin-change
    34.find-first-and-last-position-of-element-in-sorted-array
    【LeetCode】56.merge-intervals
    Leetcode】210.course-schedule-ii
    基于Thread实现自己的定时器Timer
    Boost--内存管理--(1)智能指针
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/15188493.html
Copyright © 2011-2022 走看看