1前言
NFS(Network File System)是 Linux/Unix 环境中最常用的网络文件共享协议之一。相比 SMB,NFS 在局域网内通常具有更低的协议开销和更高的传输效率,非常适合媒体中心、开发环境或家庭实验室场景。
本指南将带你完成整个流程:使用 Docker 快速部署一个基于 itsthenetwork/nfs-server-alpine 镜像的 NFS 服务器,然后在 macOS 上通过 GoMount 实现自动挂载和智能卸载。即使你没有实体 NAS,只要有一台运行 Docker 的服务器(甚至是本地 Mac 上的 Docker Desktop),也能跟随本教程完成全部操作。
2准备工作
在开始之前,请确认你已经具备以下条件:
- 一台运行 Docker 的主机(可以是 Linux 服务器、本地 Mac 或 Windows 上的 Docker Desktop)。
- 该主机与你的 Mac 处于同一局域网,或者网络可达。
- macOS 13 (Ventura) 或更高版本。
- 已安装 GoMount(免费版即可满足本教程需求)。
提示:如果你在本地 Mac 上运行 Docker Desktop,请确保为容器分配了足够的资源(建议至少 2GB 内存),并且防火墙没有阻止 2049 端口。
3使用 Docker 启动 NFS 服务器
我们将使用 itsthenetwork/nfs-server-alpine 镜像,这是一个轻量级、开箱即用的 NFS 服务器容器,基于 Alpine Linux,镜像体积仅约 20MB。
3.1 创建本地共享目录
首先在 Docker 主机上创建一个目录,用于作为 NFS 的共享根目录:
mkdir -p ~/nfs-share/data
3.2 运行 NFS 容器
执行以下 Docker 命令启动 NFS 服务:
docker run -d \
--name nfs-server \
--privileged \
-v ~/nfs-share/data:/data/nfs/share \
-e SHARED_DIRECTORY=/data/nfs/share \
-e ALLOWED_HOST=0.0.0.0/0 \
-p 2049:2049 \
-p 2049:2049/udp \
itsthenetwork/nfs-server-alpine:latest
参数说明:
--privileged:NFS 服务需要特权模式来操作内核的 NFS 模块。-v ~/nfs-share/data:/data/nfs/share:将主机的本地目录挂载到容器内的共享路径。-e SHARED_DIRECTORY=/data/nfs/share:设置容器内的共享目录路径。-e ALLOWED_HOST=0.0.0.0/0:允许所有主机访问。生产环境中建议替换为你的局域网网段,例如192.168.1.0/24。-p 2049:2049和-p 2049:2049/udp:暴露 NFS 的 TCP 和 UDP 端口。
安全警告:ALLOWED_HOST=0.0.0.0/0 会允许任何 IP 访问你的 NFS 共享,仅建议在受信任的局域网内使用。如果服务器暴露在公网,请务必限制为具体的内网网段。
3.3 检查容器状态
docker ps -f name=nfs-server
如果看到容器状态为 Up,说明 NFS 服务已经启动成功。
4验证 NFS 服务
在正式用 GoMount 挂载之前,建议先从命令行验证 NFS 服务是否正常工作。
4.1 查看可用的 NFS 共享
在 Mac 的终端中运行以下命令(将 <docker-host-ip> 替换为你的 Docker 主机 IP):
showmount -e <docker-host-ip>
如果输出类似以下内容,说明共享已经正确暴露:
Exports list on <docker-host-ip>:
/data/nfs/share 0.0.0.0/0
4.2 手动挂载测试
你可以使用 macOS 原生的 mount_nfs 命令进行临时挂载测试:
sudo mkdir -p /Volumes/DockerNFS
sudo mount_nfs -o resvport <docker-host-ip>:/data/nfs/share /Volumes/DockerNFS
然后打开 Finder,在 位置 中应该能看到 DockerNFS 卷。尝试在里面创建一个文件,确认读写权限正常。
注意:macOS 的 NFS 客户端需要使用 -o resvport 选项(使用保留端口),否则很多 NFS 服务器会拒绝连接。GoMount 在挂载 NFS 时会自动添加此参数,无需手动处理。
测试完成后,卸载该卷:
sudo umount /Volumes/DockerNFS
5在 GoMount 中配置 NFS 挂载
现在将 Docker NFS 服务器添加到 GoMount,让它为你自动管理挂载。
5.1 添加 NAS 设备
点击菜单栏的 GoMount 图标,打开 Settings,切换到 NAS Config 标签页,点击 + 按钮添加新设备。
填写以下信息:
- Name:
Docker NFS(或任何你喜欢的名称)。 - Protocol: 选择 NFS。
- Address: 输入 Docker 主机的 IP 地址,例如
192.168.1.50。 - Share: 输入
/data/nfs/share(这是容器内的共享路径,也是 NFS 导出的路径)。 - Username / Password: NFSv4 在没有启用 Kerberos 时通常不需要认证,留空即可。如果后续配置了认证,再填写对应凭据。
5.2 自定义挂载参数(可选)
GoMount 默认会使用 vers=4,tcp,resvport,noresvport 进行 NFS 挂载。如果你需要额外参数(如调整读写块大小),可以在 Advanced 设置中添加:
rsize=8192,wsize=8192,nolocks
Pro 提示:对于 Docker Desktop for Mac 这类虚拟化环境,适当减小 rsize 和 wsize 有助于提升小文件传输的稳定性。
填写完成后点击 Save。
6设置自动挂载规则
配置好 NAS 后,接下来设置自动挂载规则,让 GoMount 在检测到家庭网络时自动连接。
6.1 配置规则
切换到 Rules 标签页,添加一条新规则:
- NAS: 选择刚才创建的
Docker NFS。 - IP Range: 输入你的局域网网段,例如
192.168.1.0/24。 - Wi-Fi SSID(可选): 如果你只想在特定 Wi-Fi 下挂载,可以填入你的网络名称,例如
MyHome_5G。
保存规则后,GoMount 会立即开始监控网络状态。
6.2 验证自动挂载
观察菜单栏的 GoMount 图标颜色变化:
- 绿色:已成功挂载 Docker NFS 共享。
- 黄色:正在尝试连接或重新挂载。
- 灰色:当前不在配置的网络中,已安全卸载。
你也可以点击菜单栏图标,选择 Browse Files,直接在 GoMount 的内置文件浏览器中访问共享内容,无需打开 Finder。
7常见问题排查
7.1 showmount 显示 "RPC: Program not registered"
这通常意味着 NFS 服务没有正确启动。检查容器日志:
docker logs nfs-server
常见问题包括:没有使用 --privileged 模式、本地目录不存在、或者端口被占用。
7.2 macOS 挂载时报 "Operation not permitted"
确保你使用了 resvport 选项。GoMount 会自动处理这一点,但手动测试时不要忘记添加。
7.3 挂载成功但文件显示为只读
检查容器内的目录权限。NFS 服务器以 root 身份运行,但客户端的写入权限取决于文件系统的 UID/GID 映射。尝试在启动容器时设置环境变量:
-e EXTRA_OPTS="rw,sync,no_subtree_check,insecure"
或者确保主机上的 ~/nfs-share/data 目录对所有人可写:
chmod -R 777 ~/nfs-share/data
7.4 GoMount 显示黄色状态但无法挂载
检查以下几点:
- Mac 与 Docker 主机之间的网络是否互通(尝试
ping <docker-host-ip>)。 - 防火墙是否放行了 2049 端口。
- Share 路径是否准确(必须以
/开头,且与SHARED_DIRECTORY环境变量一致)。
8总结与下一步
通过本指南,你已经成功使用 Docker 搭建了一个轻量级 NFS 服务器,并通过 GoMount 在 macOS 上实现了自动挂载。这种组合非常适合以下场景:
- 开发测试环境:快速为团队提供共享的文件存储,无需采购实体 NAS。
- 家庭媒体中心:在树莓派或旧电脑上运行 Docker NFS,为家中所有 Mac 提供统一的媒体库。
- 临时文件共享:需要快速在两台机器之间传输大文件时,拉起容器即可使用。
如果你想了解更多协议细节,推荐阅读我们的 NFS vs SMB 对比指南。如果你准备将 GoMount 用于更多设备,可以考虑 升级到 Pro 以解锁无限 NAS 设备和完整的文件读写权限。
如果你在配置过程中遇到其他问题,欢迎通过 Contact 页面与我们取得联系。