Ubuntu环境
1、安装nfs-server
$ apt-get install nfs-kernel-server
2、建立nfs专用文件夹
$ mkdir /data/share
3、配置nfs
$ vi /etc/exports
/data/share/ *(async,insecure,no_root_squash,no_subtree_check,rw)
/data/share:与nfs服务客户端共享的目录,这个路径必须和你前面设置的文件的路径一致
*:所有可以ping同该主机的用户
192.168.1.*: 指定网段,在该网段中的用户可以挂载
192.168.1.12: 只有该用户能挂载
rw:挂接此目录的客户端对该共享目录具有读写权限
async:资料同步写入内存和硬盘
no_root_squash:root用户具有对根目录的完全管理访问权限。
no_subtree_check:不检查父目录的权限。
4、重启rpcbind 服务
nfs是一个RPC程序,使用它前,需要映射好端口,通过rpcbind 设定。
$ /etc/init.d/rpcbind restart
5、重启nfs服务
$ /etc/init.d/nfs-kernel-server restart
6、挂载指令
$ mount -t nfs 192.168.0.128:/data/share /nfsdir
通过docker centos
#启动centos Docker
$ docker run -itd --name docker-centos centos:latest
#进入docker后执行以下命令,报错
$ systemctl status firewalld.service
Failed to get D-Bus connection: Operation not permitted
#解决方法:
$ docker run --privileged -itd --name docker-centos centos:latest /usr/sbin/init
$ showmount -e 172.17.0.2
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
解决方法:
被访问的NFS服务器上的防火墙没有添加规则,向iptables里面添加查看的所有端口即可(也可以关闭防火墙,不过这样是比较不安全的)
查看端口命令:
$ rpcinfo -p localhost
$ mount -t nfs 172.17.0.2:/data /data -o proto=tcp -o nolock
mount.nfs: Operation not permitted
解决方法:
docker容器启动的时候需要加上--privileged参数,否则启动nfs服务时候会提示权限不足报错。主要是这个过程中涉及到了mount操作, 使用该参数后使得container内的root拥有真正的root权限。
$ showmount -e localhost
clnt_create: RPC: Remote system error - Address family not supported by protocol
解决办法:
启动rpcbind和nfs
$ service rpcbind restart
$ service nfs restart
取消挂载
$ umount -l /data/share