CentOS 7 搭建 NFS Server 服务端 + 客户端 完整一键配置
全程可直接复制执行,含权限、防火墙、开机自启、fstab 永久挂载、优化参数。
一、环境说明
- 服务端(NAS/存储):
192.168.1.10 - 客户端(Docker宿主机):
192.168.1.20 - 系统:CentOS 7
一、NFS 服务端配置(Server)
1. 安装依赖
bash
yum install -y nfs-utils rpcbind
2. 创建共享目录
bash
mkdir -p /data/nfs-share
chmod 755 /data/nfs-share
# 权限放开,避免容器权限报错
chown nfsnobody:nfsnobody /data/nfs-share
3. 配置共享文件 /etc/exports
bash
vi /etc/exports
写入内容:
/data/nfs-share 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
参数说明:
rw:读写权限sync:同步写入(数据安全),追求性能可改为asyncno_root_squash:客户端root保持权限(Docker必备)192.168.1.0/24:允许整个网段访问,按需缩小范围
4. 启动&开机自启
bash
systemctl start rpcbind
systemctl start nfs
systemctl enable rpcbind
systemctl enable nfs
5. 放行防火墙
bash
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload
6. 验证服务端配置
bash
# 查看共享
exportfs -rav
# 查看可挂载列表
showmount -e localhost
二、NFS 客户端配置(Docker 宿主机)
1. 安装客户端工具
bash
yum install -y nfs-utils
2. 测试连通性
bash
# 查看服务端共享目录
showmount -e 192.168.1.10
正常输出:
/data/nfs-share 192.168.1.0/24
3. 创建本地挂载目录
bash
mkdir -p /data/nas-docker
4. 临时挂载(带性能优化参数)
bash
mount -t nfs \
-o rsize=1048576,wsize=1048576,async,hard,_netdev,noatime \
192.168.1.10:/data/nfs-share /data/nas-docker
5. 永久挂载 /etc/fstab(开机自动挂载)
bash
vi /etc/fstab
添加一行:
192.168.1.10:/data/nfs-share /data/nas-docker nfs rsize=1048576,wsize=1048576,async,hard,_netdev,noatime 0 0
生效测试:
bash
mount -a
df -h
三、Docker 直接使用 NFS 两种方式
方式1:宿主机挂载目录 + bind 挂载(稳定推荐)
yaml
version: '3.8'
services:
test-nfs:
image: nginx
volumes:
- /data/nas-docker:/html
方式2:Docker 原生 NFS 卷(无本地挂载目录)
yaml
version: '3.8'
services:
app-nfs:
image: nginx
volumes:
- nfs-data:/html
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.10,rsize=1048576,wsize=1048576,async,hard,noatime
device: ":/data/nfs-share"
四、常用排错命令
bash
# 卸载NFS
umount /data/nas-docker
# 强制卸载(卡死时)
umount -f /data/nas-docker
# 查看挂载参数
mount | grep nfs
# 重启nfs服务端
systemctl restart nfs rpcbind
五、关键注意事项
- 数据库、Redis、MQ 禁止挂载 NFS,IO延迟、锁冲突、丢数据风险极高。
- 追求性能:用
async;追求数据绝对安全:改为sync。 - 权限报错:服务端共享参数加
no_root_squash,客户端不用改权限。 - 网络不稳定:保留
hard,_netdev,防止挂载卡死系统。