docker NFS共享目录实现

服务端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#安装 rpcbind 和 nfs-utils
yum install nfs-utils rpcbind
#Ubuntu中
# 服务端
apt install nfs-kernel-server
# 客户端
apt install nfs-common
#在服务端创建一个共享目录 /home/shared ,作为客户端挂载的远端入口,然后设置权限。
mkdir -p /home/shared
chmod 777 /home/shared
#修改 NFS 配置文件
vi /etc/exports
/home/shared *(rw,sync,insecure,no_subtree_check,no_root_squash)
# 启动rpc服务
service rpcbind start
# 启动 NFS 服务
service nfs-server start
#查看是否正确加载了设置的 /etc/exports 配置
showmount -e localhost
# 端口配置或关闭防火墙systemctl stop firewalld
# nfs启动时会随机启动多个端口并向RPC注册,配置NFS固定端口
vi /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
# 端口开放
TCP&UDP 111,2049,30001-30004

/home/shared 文件目录设置为 * 即允许所有客户端挂载,可以设置 IP 区间,例如:/home 10.222.77.0/24(ro,sync,insecure,no_root_squash) 设置该ip区间的客户端挂载只读挂载。

NFS 配置文件参数参考

参数 说明
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async nfs 在写入数据前可以响应请求
secure nfs 通过 1024 以下的安全 TCP/IP 端口发送
insecure nfs 通过 1024 以上的端口发送
wdelay 如果多个用户要写入 nfs 目录,则归组写入(默认)
no_wdelay 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置
hide 在 nfs 共享目录中不共享其子目录
no_hide 共享 nfs 目录的子目录
subtree_check 如果共享 /usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认)
no_subtree_check 不检查父目录权限
all_squash 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录
no_all_squash 保留共享文件的 UID 和 GID(默认)
root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)
no_root_squash root 用户具有根目录的完全管理访问权限
anonuid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID
anongid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID

客户端配置

1
2
3
4
5
6
7
8
9
10
# 客户端
# 客户端查看共享目录
showmount -e ip
# 客户端挂载点
mkdir -p /home/shared
chmod 777 /home/shared
# 挂载
sudo mount -t nfs 192.168.13.129:/home/shared /home/shared
# 卸载
umount /home/shared

挂载到docker

1
docker run -d --privileged=true --name jenkins -p 8080:8080 -p 50000:50000 -v /home/shared:/home/shared -v ~/docker/jenkins:/var/jenkins_home jenkins/jenkins