通过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方式运行的标准。