GoMount 挂载 Docker NFS 服务器完整实战指南

从 Docker 容器启动 NFS 服务到 macOS 自动挂载,一条龙的实战教程。

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 这类虚拟化环境,适当减小 rsizewsize 有助于提升小文件传输的稳定性。

填写完成后点击 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 页面与我们取得联系。

准备好让 NAS 自动挂载了吗?

下载 GoMount 免费版即可体验自动挂载,随时升级到 Pro 解锁更多高级功能。

Download for macOS