通过nfs在ubuntu之间共享文件

server 端

server端安装nfs-kernel-server, 提供exportfs的应用,

sudo apt install nfs-kernel-server

启动nfsd服务的命令是

sudo systemctl start nfs-kernel-server.service

exportfs以什么属性共享什么文件等设置,在/etc/exportfs文件中设置,man 5 exportfs可以看设置的一些介绍,如下为一个设置,

/home/zwl/work/daily 192.168.2.34(rw,async,no_subtree_check,all_squash,anonuid=1000,anongid=1000)

client 端

mount -t nfs指定nfs方式mount目录,底层调用的是/sbin/mount.nfs, 这个默认是没有装的,需要安装下面的nfs client.

sudo apt install nfs-common

可以通过/etc/fstab完成目录的开机自动mount,

nfs共享文件可以避免不同系统之间修改后手动同步。

docker nfs 使用

一种是将docker内部的文件系统通过nfs server共享出去,一种是在docker内mount外部ip的nfs server提供的文件系统。

第二种方式,考虑docker安全的问题,原则上是做不到的。

共享docker内部文件

遇到了两个问题,启动nfs server失败:

root@bd572998b66d:~# systemctl restart nfs-server
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

主要是没有采用特权加/usr/sbin/init方式来启动docker,

可以通过service命令来启动, service具体支持的service名字可以通过 service --status-all来查看。但换成了另外一个问题

root@6a643845c76a:~# service nfs-kernel-server start
mount: /proc/fs/nfsd: permission denied.
 * Exporting directories for NFS kernel daemon...                                                                                                                                                                                            
 exportfs: /root/test does not support NFS export

这里主要是两个问题:mount: /proc/fs/nfsd: permission denied.应该是没有使用privileged方式启动docker container。采用privileged方式启动可以解决。

/root/test does not support NFS export这是因为这个目录是个overlay的地址。查找一下系统中非overlay的目录是可以的。

解决上面两个问题之后,看到

zwl@d2b6f370748e:~$ sudo service nfs-kernel-server start
[sudo] password for zwl:
 * Exporting directories for NFS kernel daemon...                                                                                                                                                                                     [ OK ]
 * Starting NFS kernel daemon
 * Not starting: portmapper is not running

Not starting: portmapper is not running是因为没有启动rpcbind的服务,可以通过下面的问题解决

sudo service rpcbind start
sudo service nfs-kernel-server start # docker中能不能执行这个,是检查是否采用privileged方式运行的标准。
posted @ 2024-06-08 17:42  zwlwf  阅读(6)  评论(0编辑  收藏  举报