
mekayelanik/nfs-server-alpine一个轻量级、高度可定制的容器化NFS服务器多架构镜像
!NFS
这是一个非官方的多架构NFS服务器Docker镜像,专为多平台支持而创建。该镜像可创建本地NFS服务器,以促进客户端数据传输。官方网站:<[***]>
!Docker Pulls!Docker Stars
| 架构 | 是否可用 | 标签格式 | 状态 |
|---|---|---|---|
| x86-64 | ✅ | amd64-<版本标签> | 已测试“可用” |
| arm64 | ✅ | arm64v8-<版本标签> | 已测试“可用” |
| armhf | ✅ | arm32v7-<版本标签> | 已测试“可用” |
| 标签 | 是否可用 | 描述 |
|---|---|---|
| latest | ✅ | 稳定的NFS发行版 |
| 4.2 | ✅ | 静态NFS构建版本4.2 |
以下是帮助您开始创建容器的示例代码片段。
yaml--- version: "3.9" services: nfs-server: image: mekayelanik/nfs-server-alpine:latest container_name: nfs-server-1 environment: - TZ=Asia/Dhaka # 时区 - ALLOWED_CLIENT=192.168.1.1/24 # 允许访问的客户端IP段 - NFS_MOUNT_PORT=2049 # NFS挂载端口 # 不包含根目录的共享数量 - NUMBER_OF_SHARES=2 - NFS_EXPORT_1=Movies # 第一个共享目录 - NFS_EXPORT_2=Music # 第二个共享目录 privileged: true # 特权模式,NFS运行必需 volumes: # 不要修改以下映射(/lib/modules),这是NFS容器运行的必需配置('sys_module' modprobe) - /lib/modules:/lib/modules # 容器内的NFS根目录'/data'必须映射到主机(服务器)上的有效目录 # 不能为子共享使用不同的父目录(例如/mnt/drive2/Movies) # 若要共享其他父目录下的子共享,必须部署新的容器(这是NFS的工作机制) # 要创建多个NFS服务器容器,请使用下方的MACVLAN示例 - /mnt/drive1:/data # 主机目录映射到容器内/data - /mnt/drive1/Movies:/data/Movies # 电影共享目录映射 - /mnt/drive1/Music:/data/Music # 音乐共享目录映射 ports: - 2049:2049 # NFS端口 - 111:111 # RPC端口 - 32765-32767:32765-32767 # 其他所需端口 # 不要修改以下配置,这是NFS容器运行的必需权限(cap_add) cap_add: - SYS_ADMIN - SETPCAP - ALL restart: unless-stopped # 除非手动停止,否则总是重启
bashdocker run -d \ --name=nfs-server-alpine \ -e TZ=Asia/Dhaka \ # 时区 -e NFS_MOUNT_PORT=2049 \ # NFS挂载端口 -e NUMBER_OF_SHARES=2 \ # 共享数量 -e NFS_EXPORT_1=Movies \ # 第一个共享目录 -e NFS_EXPORT_2=Music \ # 第二个共享目录 -e ALLOWED_CLIENT=192.168.1.1/24 \ # 允许访问的客户端IP段 -v /lib/modules:/lib/modules \ # 内核模块映射(必需) -v /mnt/drive1:/data \ # 根目录映射 -v /mnt/drive1/Movies:/data/Movies \ # 电影共享目录 -v /mnt/drive1/Music:/data/Music \ # 音乐共享目录 --privileged \ # 特权模式 --restart unless-stopped \ # 重启策略 mekayelanik/nfs-server-alpine:latest
bashdocker network create -d macvlan \ --subnet=192.168.0.0/16 \ # 设置子网,删除此注释 --ip-range=192.168.1.0/16 \ # 设置此MACVLAN的IP范围(容器IP将从此范围分配),删除此注释 --gateway=192.168.0.1 \ # 设置网络网关或路由器本地IP,删除此注释 -o parent=eth0 macvlan-docker # parent=网络接口(树莓派通常为'eth0',现代x86系统可能为'enp4s0',通过'tcpdump --list-interfaces'查看),末尾为MACVLAN网络名称(此处为macvlan-docker)
yaml--- version: "3.9" services: nfs-server: image: mekayelanik/nfs-server-alpine:latest container_name: nfs-server-1 environment: - TZ=Asia/Dhaka - ALLOWED_CLIENT=192.168.1.1/24 - NFS_MOUNT_PORT=2049 # 不包含根目录的共享数量 - NUMBER_OF_SHARES=2 - NFS_EXPORT_1=Movies - NFS_EXPORT_2=Music privileged: true volumes: # 不要修改以下映射(/lib/modules),这是NFS容器运行的必需配置('sys_module' modprobe) - /lib/modules:/lib/modules # 容器内的NFS根目录'/data'必须映射到主机(服务器)上的有效目录 # 不能为子共享使用不同的父目录(例如/mnt/drive2/Movies) # 若要共享其他父目录下的子共享,必须部署新的容器(这是NFS的工作机制) # 要创建多个NFS服务器容器,请使用下方的MACVLAN示例 - /mnt/drive1:/data - /mnt/drive1/Movies:/data/Movies - /mnt/drive1/Music:/data/Music ports: - 2049:2049 - 111:111 - 32765-32767:32765-32767 # 不要修改以下配置,这是NFS容器运行的必需权限(cap_add) cap_add: - SYS_ADMIN - SETPCAP - ALL restart: unless-stopped hostname: nfs-server-1 # 主机名 domainname: local # 域名 mac_address: 14-24-34-44-54-64 # MAC地址 networks: macvlan-docker: ipv4_address: 192.168.1.21 # 分配的静态IP # 网络定义 networks: macvlan-docker: name: macvlan-docker # 引用创建的MACVLAN网络 external: True # 外部网络
yaml--- version: "3.9" services: ########### 父目录/磁盘1共享容器 ########### nfs-server-disk1: image: mekayelanik/nfs-server-alpine:latest container_name: nfs-server-disk1 environment: - TZ=Asia/Dhaka - ALLOWED_CLIENT=192.168.1.1/24 - NFS_MOUNT_PORT=2049 # 不包含根目录的共享数量 - NUMBER_OF_SHARES=2 - NFS_EXPORT_1=Movies - NFS_EXPORT_2=Music privileged: true volumes: ### 不要修改以下映射(/lib/modules),这是NFS容器运行的必需配置('sys_module' modprobe)### - /lib/modules:/lib/modules # 容器内的NFS根目录'/data'必须映射到主机(服务器)上的有效目录 # 不能为子共享使用不同的父目录(例如/mnt/drive2/Movies) # 若要共享其他父目录下的子共享,必须部署新的容器(这是NFS的工作机制) # 要创建多个NFS服务器容器,请使用下方的MACVLAN示例 - /mnt/drive1:/data - /mnt/drive1/Movies:/data/Movies - /mnt/drive1/Music:/data/Music ports: - 2049:2049 - 111:111 - 32765-32767:32765-32767 ### 不要修改以下配置,这是NFS容器运行的必需权限(cap_add)### cap_add: - SYS_ADMIN - SETPCAP - ALL restart: unless-stopped hostname: nfs-server-1 domainname: local mac_address: ab-cd-ef-ab-cd-a1 networks: macvlan-docker: ipv4_address: 192.168.249.101 # 磁盘1的NFS服务器IP ########### 父目录/磁盘2共享容器 ########### nfs-server-disk2: image: mekayelanik/nfs-server-alpine:latest container_name: nfs-server-disk2 environment: - TZ=Asia/Dhaka - ALLOWED_CLIENT=192.168.1.1/24 - NFS_MOUNT_PORT=2049 # 不包含根目录的共享数量 - NUMBER_OF_SHARES=2 - NFS_EXPORT_1=Games - NFS_EXPORT_2=Softwares privileged: true volumes: # 不要修改以下映射(/lib/modules),这是NFS容器运行的必需配置('sys_module' modprobe) - /lib/modules:/lib/modules # 容器内的NFS根目录'/data'必须映射到主机(服务器)上的有效目录 # 不能为子共享使用不同的父目录(例如/mnt/drive2/Movies) # 若要共享其他父目录下的子共享,必须部署新的容器(这是NFS的工作机制) # 要创建多个NFS服务器容器,请使用下方的MACVLAN示例 - /mnt/drive2:/data - /mnt/drive2/Games:/data/Games - /mnt/drive2/Softwares:/data/Softwares ports: - 2049:2049 - 111:111 - 32765-32767:32765-32767 # 不要修改以下配置,这是NFS容器运行的必需权限(cap_add) cap_add: - SYS_ADMIN - SETPCAP - ALL restart: unless-stopped hostname: nfs-server-disk2 domainname: local mac_address: ab-cd-ef-ab-cd-a2 networks: macvlan-docker: ipv4_address: 192.168.249.102 # 磁盘2的NFS服务器IP # 网络定义 networks: macvlan-docker: name: macvlan-docker external: True
在客户端机器上执行以下命令挂载NFS共享:
bash# 挂载根目录 sudo mount -v -o vers=4.2,loud HOST-IP:/ /mount/path/to/ROOT-MOUNT-DIR 示例:sudo mount -v -o vers=4.2,loud 192.168.1.2:/ /mount/path/to/ROOT-MOUNT-DIR # 挂载子共享(命令行方式) sudo mount -v -o vers=4.2,loud HOST-IP:/Movies /nfs_shares/Movies sudo mount -v -o vers=4.2,loud HOST-IP:/Music /nfs_shares/Music 示例: mkdir -p /nfs_shares/Movies && \ sudo mount -v -o vers=4.2,loud 192.168.1.2:/Movies /nfs_shares/Movies
在/etc/fstab中添加以下内容:
bash##### NFS共享挂载 ##### 192.168.249.101:/ /nfs_shares nfs nofail,noauto,x-systemd.automount 192.168.249.101:/Movies /nfs_shares/Movies nfs nofail,noauto,x-systemd.automount 192.168.249.101:/Music /nfs_shares/Music nfs nofail,noauto,x-systemd.automount
bashsudo umount /nfs_shares/Movies
以下是更新容器的说明:
docker compose pull
docker compose pull mekayelanik/nfs-server-alpinedocker compose up -d
docker compose up -d nfs-server-alpinedocker image prunedocker pull mekayelanik/nfs-server-alpine:latestdocker stop nfs-server-alpinedocker rm nfs-server-alpinedocker image prunebashdocker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower\ --run-once nfs-server-alpine
docker image prune注意:可以使用Watchtower实现Docker容器的自动更新,但不建议使用自动更新。不过,对于忘记原始参数的容器,这是一个有用的一次性手动更新工具。长期来看,建议使用[Docker Compose]([***]





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务