[TOC]
描述: 先来学习三大步,任何事物皆可用;
Q: 什么是NFS?为什么要NFS?
描述:NFS(Network File System)即网络文件系统, 利用网络使得在不同的机器之间共享文件。 通过NFS可以将另一台机器的某个目录挂载到本机的某个目录下, 在使用的时候挂载过来的目录就像在本地一样, 极大的方便了多台服务器之间的文件共享。
补充:在提到NFS服务的时候都会提到RPC服务,那么什么是RPC服务,为什么需要RPC服务呢? 答:RPC是Remote Procedure Call的缩写即远程过程调用,其次关于为什么要RPC服务是因为NFS服务在启动的时候对于端口的选择是随机的,NFS在启动的时候回随机选择小于1024的端口进行数据的传输。而RPC的主要功能就是记录每个NFS服务所对应的端口号,当客户端尝试连接NFS服务时它会将其对应的端口号发送给客户端,客户端根据获得的端口号进行连接。
rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器 rpc.mount:主要功能是管理NFS的文件系统,当客户端顺利通过nfsd登录NFS服务器后,在使用NFS服务所提供的磁盘前,还必须通过目录使用权限的验证,它会读取NFS的配置文件/etc/exports(初始文件为空)来对比客户端权限 portmap:主要功能是进行端口映射工作 idmap:进程实现用户映射和压缩
Q: NFS 特点有哪里?
(1) 方便多台服务器之间的文件共享(2) 搭建使用简单(3) 可进行密码认证以及Kerberos认证Q:NFS 应用场景
(1) 比如Kubernetes中多台主机共享存储资源;NFS 版本说明
(1) NFSv2 and NFSv3
# NFSv3同时支持TCP和UDP传输层协议 # NFSv3使用大量辅助协议通过portmap/rpcbind获取rpc.mounted监听端口,再进行身份验证其次验证通过后nfs客户端才能与rpc.nfsd建立联系并访问共享 Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) mount -t nfs 11.11.165.115:/data /tmp/data -o proto=tcp -o nolock
(2) NFSv4:
Example for NFSv4: # /srv/nfs4 gss/krb5(rw,sync,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # 客户端挂载过程需要通过mount –t nfs4指定NFS版本为4,默认采用nfsv3。 mount -t nfs4 192.168.78.1:/data /tmp/data
NFSv4和NFSv3的差别如下:
(1) NFSv4设计成了一种有状态的协议,自身实现了文件锁功能和获取文件系统根节点功能,不需要NLM和MOUNT协议协助了。
(2) NFSv4增加了安全性,支持RPCSEC-GSS身份认证。
(3) NFSv4只提供了两个请求NULL和COMPOUND,所有的操作都整合进了COMPOUND中,客户端可以根据实际请求将多个操作封装到一个COMPOUND请求中,增加了灵活性。
(4) NFSv4文件系统的命令空间发生了变化,服务器端必须设置一个根文件系统(fsid=0),其他文件系统挂载在根文件系统上导出。客户端需要使用“nfs server ip:/”挂载伪文件系统,伪文件系统一般使用RO方式共享,其他共享可以通过mount –bind选项在伪文件系统目录下挂载;
(5)NFSv4支持delegation。由于多个客户端可以挂载同一个文件系统,为了保持文件同步,NFSv3中客户端需要经常向服务器发起请求,请求文件属性信息,判断其他客户端是否修改了文件。如果文件系统是只读的,或者客户端对文件的修改不频繁,频繁向服务器请求文件属性信息会降低系统性能。NFSv4可以依靠delegation实现文件同步。当客户端A打开一个文件时,服务器会分配给客户端A一个delegation。只要客户端A具有delegation,就可以认为与服务器保持了一致。如果另外一个客户端B访问同一个文件,则服务器会暂缓客户端B的访问请求,向客户端A发送RECALL请求。当客户端A接收到RECALL请求时将本地缓存刷新到服务器中,然后将delegation返回服务器,这时服务器开始处理客户端B的请求。
(6) NFSv4修改了文件属性的表示方法。由于NFS是Sun开发的一套文件系统,设计之出NFS文件属性参考了UNIX中的文件属性,可能Windows中不具备某些属性,因此NFS对操作系统的兼容性不太好。NFSv4将文件属性划分成了三类:
* Mandatory Attributes: 这是文件的基本属性,所有的操作系统必须支持这些属性。 * Recommended Attributes: 这是NFS建议的属性,如果可能操作系统尽量实现这些属性。 * Named Attributes: 这是操作系统可以自己实现的一些文件属性。
(7)服务器端拷贝: 如果客户需要从一个NFS服务器拷贝数据到另外一个NFS服务器,nfsv4可以让两台NFS服务器之间直接拷贝数据,不需要经过客户端。
(8)资源预留和回收:NFSv4为虚拟分配提供的新特性。随着存储虚拟分配功能的普及使用,nfsv4可以为预留固定大小的存储空间;同样在文件系统上删除文件后,也能够在存储上面释放相应空间。
(9)国际化支持: NFSv4文件名、目录、链接、用户与组可以使用 UTF-8字符集,UTF-8兼容ASCII码,使得NFSv4支持更多语言。
(10)RPC合并调用:NFSv4允许将多个请求合并为一个rpc引用,在NFSv3每个请求对应一个rpc调用。WAN环境中,NFSv4合并rpc调用可以显著降低延迟。
(11)安全性:NFSv4用户验证采用“用户名+域名”的模式,与Windows AD验证方式类似,NFSv4强制使用Kerberos验证方式。(Kerberos与Windows AD都遵循相同RFC1510标准),这样方便windows和*nix环境混合部署。
(12)pNFS并行NFS文件系统,元数据服务器负责用户请求调度、数据服务器负责客户请求处理。pNFS需要NFS服务器和客户端协同支持,pNFS架构示意图如下:
WeiyiGeek.pNFS架构
NFS 服务协议 描述:#对于不同的网络情况,有针对地选择 UDP 或 TCP 传输协议。传输协议可以自动选择,也可以手动设置。
# 一般情况下,使用 TCP 的 NFS 比较稳定,使用 UDP 的 NFS 速度较快。 # 在机器较少,网络状况较好的情况下,使用 UDP 协议能带来较好的性能。 # 当机器较多,网络情况复杂时,推荐使用 TCP 协议(V2 只支持 UDP 协议)。 # 在局域网中使用 UDP 协议较好,因为局域网有比较稳定的网络保证,使用 UDP 可以带来更好的性能。 # 在广域网中推荐使用 TCP 协议,TCP 协议能让 NFS 在复杂的网络环境中保持最好的传输稳定性。
客户端连接NFS服务的过程:
1.客户端首先向NFS服务所在的服务器的RPC服务发起请求RPC服务的端口固定为 111
$rpcinfo -p 192.168.1.216 # program vers proto port service # 100000 4 tcp 111 portmapper # 100003 3 tcp 2049 nfs # 100003 4 tcp 2049 nfs # 100227 3 tcp 2049 nfs_acl # 100003 3 udp 2049 nfs # 100227 3 udp 2049 nfs_acl ``` * 2.RPC服务在接收到客户端的请求之后,找到注册的NFS服务所对应的端口号,并将端口号发送给客户端例如: ```bash tcp 0 0 192.168.1.216:2049 192.168.1.216:885 ESTABLISHED off (0.00/0/0)
3.客户端根据获取到NFS端口号进行连接;
测试环境:CentOS Linux release 7.8.2003 (Core) NFS server端配置
# 1.检查服务器是否安装了nfs-util和rpcbind两个包 $rpm -qa | grep nfs #nfs-utils:NFS服务的全程序,包括rpc.nfsd、rpc.mountd这两个daemons和相关文档说明,以及执行命令文件等。 nfs-utils-1.2.3-54.el6.x86_64 nfs-utils-lib-1.1.5-9.el6.x86_64 $rpm -qa | grep rpcbind #rpcbind:Centos.x下面RPC的主程序。NFS可视为一个rpc程序,在互动任何一个RPC程序之前,需要做好端口和功能的对应映射工作,这个映射工作就是由RPCBIND服务来完成的。因此,在提供NFS服务之前必须先启动RPCBIND服务。 rpcbind-0.2.0-11.el6.x86_64 # 2.如果没安装进行安装上述两个包即可 $yum install –y rpcbind nfs-utils # 正在安装: # nfs-utils x86_64 1:1.3.0-0.66.el7_8 updates 412 k # rpcbind x86_64 0.2.0-49.el7 base 60 k # 为依赖而安装: # gssproxy x86_64 0.7.0-28.el7 base 110 k # keyutils x86_64 1.5.8-3.el7 base 54 k # libbasicobjects x86_64 0.1.1-32.el7 base 26 k # libcollection x86_64 0.7.0-32.el7 base 42 k # libevent x86_64 2.0.21-4.el7 base 214 k # libini_config x86_64 1.3.1-32.el7 base 64 k # libnfsidmap x86_64 0.25-19.el7 base 50 k # libpath_utils x86_64 0.2.1-32.el7 base 28 k # libref_array x86_64 0.1.5-32.el7 base 27 k # libtirpc x86_64 0.2.4-0.16.el7 base 89 k # libverto-libevent x86_64 0.2.5-4.el7 base 8.9 k # quota x86_64 1:4.01-19.el7 base 179 k # quota-nls noarch 1:4.01-19.el7 base 90 k # tcp_wrappers x86_64 7.6-77.el7 base 78 k # 3.设置开机启动 systemctl enable rpcbind nfs # Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. # /etc/init.d/rpcbind start # deprecated # /etc/init.d/nfs start # deprecated # Starting NFS services: [ OK ] # Starting NFS quotas: [ OK ] # Starting NFS mountd: [ OK ] # Starting NFS daemon: [ OK ] # Starting RPC idmapd: [ OK ] # 4.设置共享目录以及读写权限可以添加多台主机 # 创卷NFS共享目录 mkdir -p /nfs/{data,share,backdata,upload,demo} # 共享目录所属者与组设置 chown -R nfsnobody.nfsnobody /nfs/share # 文件 exports NFS 共享目录以及访问权限设置格式。 $vi /etc/exports /nfs/data 192.168.1.0/255.255.255.0(rw,sync,root_squash,anonuid=500,anongid=500,insecure) /nfs/share 192.168.8.0/24(rw,sync) /nfs/backdata 192.168.8.7(rw) 192.168.8.8(ro) /nfs/backdata 192.168.8.*(rw) 192.168.10.*(ro) /nfs/upload 192.168.8.0/24(rw,all_squash,anonuid=1001,anongid=1001) /nfs/demo 192.168.8.0/24(ro) *(ro,all_squash) # 5.nfs server服务开启 # 开启前查看rpc信息 $rpcinfo -p # program vers proto port service # 100000 4 tcp 111 portmapper # 100000 3 tcp 111 portmapper # 100000 2 tcp 111 portmapper # 100000 4 udp 111 portmapper # 100000 3 udp 111 portmapper # 100000 2 udp 111 portmapper $systemctl start rpcbind $systemctl start nfs # 确认NFS服务器启动成功(只贴入新增部分) $rpcinfo -p # 100024 1 udp 39651 status # 100024 1 tcp 40171 status # 100005 1 udp 20048 mountd # 100005 1 tcp 20048 mountd # 100005 2 udp 20048 mountd # 100005 2 tcp 20048 mountd # 100005 3 udp 20048 mountd # 100005 3 tcp 20048 mountd # 100003 3 tcp 2049 nfs # 100003 4 tcp 2049 nfs # 100227 3 tcp 2049 nfs_acl # 100003 3 udp 2049 nfs # 100227 3 udp 2049 nfs_acl # 100021 1 udp 38221 nlockmgr # 100021 3 udp 38221 nlockmgr # 100021 4 udp 38221 nlockmgr # 100021 1 tcp 45789 nlockmgr # 100021 3 tcp 45789 nlockmgr # 100021 4 tcp 45789 nlockmgr # 6.修改配置文件后立即生效/etc/exports exportfs -av # 7.CentOS7.8防火墙相关配置(正式环境请看下面的安全配置) 测试设置如下 # firewall-cmd --permanent --zone=public --add-service=nfs # firewall-cmd --permanent --zone=public --add-service=mountd # firewall-cmd --permanent --zone=public --add-service=rpc-bind # firewall-cmd --reload # 8.查看nfs共享目录信息 $showmount -e Export list for k8s-yum-server: /nfs/share *
Client 端配置 描述:客户端主要针对Linux与Windows等环境下进行相应的配置;
Linux :使用linux连接到nfs服务器的共享目录
# (1) NFS客户端安装 yum install nfs-utils -y # (2) 使用mount命令直接挂载 mkdir -p /mnt/nfs/share nfs mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR mount –t nfs 10.10.107.201:/data /mnt/nfs/share # (3) 方式将挂载配置写入到/etc/fstab中(值得学习) 10.10.107.201:/nfs/share /mnt/nfs/share nfs defaults 0 0 mount -a # 重新挂载所有设备 # (4) 查看客户端挂载信息 df -h | grep "nfs" 10.10.107.201:/nfs/share 46G 6.8G 39G 16% /mnt/nfs/share # (5) Linux/windows相同取消挂载使用 umount /mnt
Windows: 可以直接添加Window功能:
# (1) 建立一个777的共享目录(注意权限貌似windwos上必须要x权限) $ chmod 777 /data/ #方式1 $ chmod o+w /data/ #方式2 # (2)使用windows连接linux上面的NFS服务进行共享数据: telnet 192.168.1.169 111 telnet 192.168.1.169 2049 # (3)windows功能中安装NFS客户户端,安装完成后会有mount命令 mount #查看挂载情况 mount -h #挂载帮助 # (4) 查看nfs挂载的目录(windows与linux相同) showmount -e 10.10.107.21 #显示指定NFS服务器上的共享目录列表(或者叫输出列表) # 导出列表在 10.10.107.221: # /nfs/share 10.10.107.0/255.255.255.0 # (5)查看已被挂载的客户端信息 [root@Security-221 data]# showmount -a All mount points on Security-221: 10.10.107.112:/data # (6) 挂载nfs目录:mount NFS的IP地址或者主机名 fs目录名 挂载点 mount 10.10.107.221data x: x: 现已成功连接到 10.10.107.221data 命令已成功完成。 # (7) 取消挂载:umount 挂载目录 umount x: 正在断开 x: 10.10.107.221data 命令已成功完成。
WeiyiGeek.windows安装NFS客户端
从Windows中实现文件上传的NFS中(重点:注意事项):
方式1:就是将共享文件的权限设置为777,但是这样是极不安全的
WeiyiGeek.Windwos连接NFS客户端
方式2:修改win7对nfs分区只读属性 Win7 NFS客户端使用mount命令挂载NFS服务之后,文件系统对Win7只读,无法写入文件,无法新建文件夹,此时使用mount命令可以查看到如下状态:
本地 远程 属性 ------------------------------------------------------------------------------- x: 10.10.107.221data UID=-2, GID=-2 rsize=32768, wsize=32768 mount=soft, timeout=1.6 retry=1, locking=no fileaccess=755, lang=GB2312-80 casesensitive=no sec=sys #UID=-2由于在存储设备上共享出来的NFS文件系统归属于root权限,并且无法修改该所属用户,而Windows通过UID=-2的用户去写,肯定写不进去。 解决办法: 让Win7在挂载NFS的时候将UID和GID改成0即可 打开注册表:HKEY_LOCAL_MACHINESOFTWAREMicrosoftClientForNFSCurrentVersionDefault 增加两项:AnonymousUid,AnonymousGid # PowerShell New-ItemProperty "HKLM:SOFTWAREMicrosoftClientForNFSCurrentVersionDefault" -Name AnonymousUid -value 0 -propertyType dword New-ItemProperty "HKLM:SOFTWAREMicrosoftClientForNFSCurrentVersionDefault" -Name AnonymousGid -value 0 -propertyType dword
WeiyiGeek.register
测试环境:
cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
NFS Server/Client 适用系统:Debian/Ubuntu
# Step1.服务端、客户端安装 # - Install Required Packages(Server) $apt-get update $apt-get install nfs-kernel-server rpcbind # - Client Side SetUp (Client端) $apt-get install nfs-common rpcbind # Step2.Configure NFS privilege # rpcbind 配置文件 $nano /etc/default/rpcbind OPTIONS="" # 设置允许连接的ip nano /etc/hosts.allow portmap: 192.168.1.0/24 #Example Allow 192.168.1.0/24 to be Accessed on Network # Configure idmapd $nano /etc/default/nfs-common NEED_IDMAPD=YES STATDOPTS="--port 30004" # 配置mountd服务端口为30005: $nano /etc/default/nfs-kernel-server RPCMOUNTDOPTS="--manage-gids --port 30005" # 映射的用户与组 $nano /etc/idmapd.conf [General] Verbosity = 0 Pipefs-Directory = /var/lib/nfs/rpc_pipefs Domain = localdomain [Mapping] Nobody-User = nobody Nobody-Group = nogroup $nano /etc/exports /nfs/share 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check) /storage *(rw,sync,no_root_squash,no_subtree_check) # Step3、配置共享目录 mkdir -p /nfs/share # Step4、启动RPC服务于nfs共享服务 systemctl enable rpcbind nfs-server.service # 启动 /etc/init.d/nfs-kernel-server start /etc/init.d/rpcbind start systemctl start rpcbind nfs-server.service # 停止 /etc/init.d/nfs-kernel-server stop /etc/init.d/rpcbind stop systemctl stop rpcbind nfs-server.service # 更新 (nano /etc/exports) exportfs -a # Step5、客户端挂载情况 # NFS默认是用UDP协议,换成TCP协议挂载即可(网络不稳定)情况下 mount -t nfs 11.11.165.115:/tmp/test0920 /data -o proto=tcp -o nolock $mount -l 10.10.107.201:/nfs/share on /mnt/nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.20.172.241,local_lock=none,addr=10.10.107.201) # Step6、卸载挂载点 umount /nfs/share # 如果卸载不掉可以强制卸载挂载点 fuser -km /nfs/share 先使用这条命令 # Step7、防火墙规则配置 (PS: 通过rpcinfo命令可以查看 NFS 相关的端口) ufw allow 111,2049,30005/tcp ufw reload
Tips: 在设置防火墙时需注意 2049 和 111 端口是固定端口,而 mountd 和 nlockmgr 对应的端口是随机分配的,我看可以通过上述配置将其设置为固定端口。
Windos Server 2008 NFS 服务安装使用参考地址: https://www.cnblogs.com/sttchengfei/p/13542132.html
下面列出Windows中mount关于nfs相关的参数:
-a:把/etc/fstab中列出的路径全部挂载。 -t:需要mount的类型,如nfs等。 -r:将mount的路径定为read only。 -v mount:过程的每一个操作都有message传回到屏幕上。 rsize=n:在NFS服务器读取文件时NFS使用的字节数,默认值是4096个字节。 wsize=n:向NFS服务器写文件时NFS使用的字节数,默认值是4096个字节。 timeo=n:从超时后到第1次重新传送占用的1/7秒的数目,默认值是7/7秒。 retry=n:在放弃后台mount操作之前可以尝试的次数,默认值是7 000次。 soft:使用软挂载的方式挂载系统,若Client的请求得不到回应,则重新请求并传回错误信息。 hard:使用硬挂载的方式挂载系统,该值是默认值,重复请求直到NFS服务器回应。 intr:允许NFS中断文件操作和向调用它的程序返回值,默认不允许文件操作被中断。 fg:一直在提示符下执行重复挂载。 bg:如果第1次挂载文件系统失败,继续在后台尝试执行挂载,默认值是失败后不在后台处理。 tcp:对文件系统的挂载使用TCP,而不是默认的UDP。3
Q: soft和hard模式的作用以及异同?
描述: 其主要作用是当nfs的服务器端出现异常的时候,linux服务器的底层有重发机制,nfs客户端一直去向服务器端请求,判断服务器是否正常从而会一直阻塞。 (1) 当采用hard模式,服务器端出现异常,则客户端会一直发请求,直到服务器正常。 (2) 当用soft模式,服务器端出现异常,则客户端会按照timeo和retry参数进行超时和重试。例如mount -t nfs -o rw,soft,timeo=30,retry=3 192.168.1.2:/home/nfs /mnt/local_path即每隔3s向服务端发起请求,如果三次请求后还是返回错误则停止请求。
描述: 本文针对如下情况,描述尝试的方案:
多个镜像均需挂载的目录,进行存储数据;想只申请一份挂载的存储空间,想建立其子目录以适应不同的镜像挂载;在k8s云平台中,又限制只能直接挂载PVC存储,不能对PVC下的子目录进行挂载当前无可用的公共NAS或NFS的挂载点因此,需要启动一个docker容器,用来运行NFS服务器,将同一个PVC的存储分别映射出不同的子目录供不同镜像挂载,以实现:对于镜像来说,可直接挂载自己的目录,不会对其它目录造成影响,其容器内部目录结构也不需要做任何改变。
Tips : 本文使用的镜像为 itsthenetwork/nfs-server-alpine:latest,Steven Iveson的一个方便的NFS服务器映像,仅包含Alpine Linux和NFS v4,通过端口2049上的TCP。 参考地址: https://hub.docker.com/r/itsthenetwork/nfs-server-alpine
操作实践:
# 1.NFS服务器端单挂载点搭建 docker run -d --name nfs -h nfsserver --privileged -v /some/where/fileshare:/nfsshare -e SHARED_DIRECTORY=/nfsshare -p 2049:2049 -e PERMITTED="192.168.10.*" itsthenetwork/nfs-server-alpine:12 # -p 为容器映射出来主机的端口2049; # -h 表示为本容器设定一个主机名,这样在其他容器中可使用主机名的方式访问(有可能容器在重启后其IP会变化); # -e 为设置本容器的环境变更,表示本容器对外提供的根为【/】的挂载点。 -e READ_ONLY # will cause the exports file to contain ro instead of rw, allowing only read access by clients. -e SYNC=true # will cause the exports file to contain sync instead of async, enabling synchronous mode. Check the exports man page for more information. -e PERMITTED="10.11.99.*" # will permit only hosts with an IP address starting 10.11.99 to mount the file share. # 2.NFS服务器端多挂载点搭建 docker run -d --name nfs-server --privileged -v /some/where/fileshare:/nfsshare -v /some/where/else:/nfsshare/another -e SHARED_DIRECTORY=/nfsshare -e SHARED_DIRECTORY_2=/nfsshare/another itsthenetwork/nfs-server-alpine:12 # 但您需要再 nfsd.sh 文件中加入额外的参数 if [ ! -z "${SHARED_DIRECTORY_2}" ]; then echo "Writing SHARED_DIRECTORY_2 to /etc/exports file" echo "{{SHARED_DIRECTORY_2}} {{PERMITTED}}({{READ_ONLY}},{{SYNC}},no_subtree_check,no_auth_nlm,insecure,no_root_squash)" >> /etc/exports /bin/sed -i "s@{{SHARED_DIRECTORY_2}}@${SHARED_DIRECTORY_2}@g" /etc/exports fi # 3.客户端容器连接 docker run -it --name nfs_client --privileged --link nfs_server:nfs-server alpine:latest /bin/sh # 4.客户端连接 sudo mount -v 10.11.12.101:/ /app/weiyigeek sudo mount -v 10.11.12.101:/another /mnt/weiyigeek
Tips : 镜像中的 /etc/exports 文件包含以下nfs共享目录配置*(rw,fsid=0,async,no_subtree_check,no_auth_nlm,insecure,no_root_squash)
补充 【2022年6月13日 22:13:50】
方式1.docker-compose.yml
tee docker-compose.yml <<'EOF' version: "2.1" services: # https://hub.docker.com/r/itsthenetwork/nfs-server-alpine nfs: image: itsthenetwork/nfs-server-alpine:12 container_name: nfs restart: unless-stopped privileged: true environment: - SHARED_DIRECTORY=/data volumes: - /app/storage/nfs:/data ports: - 2049:2049 EOF # 为了测试我们的 NFS 服务器,让我们将 NFS 客户端安装到主机上: $ sudo apt install nfs-client # 现在,让我们将 NFS 挂载挂载到本地路径 /mnt $ sudo mount -v -o vers=4,loud 192.168.0.4:/ /mnt
方式2
# 载入模块 nfs 依赖模块 modprobe nfs modprobe nfsd $ docker run --privileged -d --name nfs -v /app/storage/nfs:/nfsshare -e NFS_EXPORT_0='/nfsshare *(rw,sync,no_root_squash,no_all_squash,no_subtree_check,nohide,crossmnt)' -p 2049:2049 -p 2049:2049/udp -p 111:111 -p 111:111/udp -p 32765:32765 -p 32765:32765/udp -p 32767:32767 -p 32767:32767/udp erichough/nfs-server $ showmount -e 10.20.176.101 Export list for 10.20.176.101: /nfsshare *