
该镜像由Steven Iveson开发,是一个便捷的NFS服务器镜像,基于Alpine Linux,仅支持NFS v4协议,通过TCP 2049端口提供服务。它旨在提供轻量级、安全的文件共享解决方案,适用于开发、测试及小型部署环境。
注意:版本3及更早存在严重缺陷,建议使用版本4及以上。旧版本仅为兼容自动化工作流保留。
bashdocker run -d --name nfs --privileged -v /some/where/fileshare:/nfsshare -e SHARED_DIRECTORY=/nfsshare itsthenetwork/nfs-server-alpine:latest
网络配置
--net=host或-p 2049:2049使共享可通过主机网络访问| 环境变量 | 说明 | 默认值 |
|---|---|---|
SHARED_DIRECTORY | 共享目录路径(必填) | 无 |
READ_ONLY | 设为true时共享为只读模式 | rw(读写) |
SYNC | 设为true时启用同步模式 | async(异步) |
PERMITTED | 指定允许访问的客户端IP范围(如10.11.99.*) | *(所有客户端) |
基本挂载
bashsudo mount -v 10.11.12.101:/ /some/where/here
显式指定NFS版本
bashsudo mount -v -o vers=4,loud 10.11.12.101:/ /some/where/here
卸载
bashsudo umount /some/where/here
NFS服务需要特权模式运行,可通过以下方式之一实现:
bash--privileged
bash--cap-add SYS_ADMIN --cap-add SETPCAP --security-opt=no-new-privileges
注意:SYS_ADMIN能力与特权模式安全性风险相近
使用特权模式
yamlspec: containers: - name: nfs-server image: itsthenetwork/nfs-server-alpine:latest securityContext: privileged: true env: - name: SHARED_DIRECTORY value: /nfsshare volumeMounts: - name: nfs-data mountPath: /nfsshare volumes: - name: nfs-data hostPath: path: /some/where/fileshare
使用能力集
yamlspec: containers: - name: nfs-server image: itsthenetwork/nfs-server-alpine:latest securityContext: capabilities: add: ["SYS_ADMIN", "SETPCAP"]
使用特权模式
yamlversion: '3' services: nfs: image: itsthenetwork/nfs-server-alpine:latest privileged: true environment: - SHARED_DIRECTORY=/nfsshare volumes: - /some/where/fileshare:/nfsshare ports: - "2049:2049"
使用能力集
yamlversion: '3' services: nfs: image: itsthenetwork/nfs-server-alpine:latest cap_add: - SYS_ADMIN - SETPCAP environment: - SHARED_DIRECTORY=/nfsshare volumes: - /some/where/fileshare:/nfsshare ports: - "2049:2049"
启用内核头文件服务
bashsudo ros service enable kernel-headers sudo ros service up kernel-headers
永久配置(cloud-config.yml)
yaml#cloud-config rancher: services_include: kernel-headers: true
注意:RancherOS使用overlayfs作为Docker存储,需挂载ext4文件系统(如/home、/media、/mnt)作为共享目录
OverlayFS不支持NFS导出,需将共享目录挂载到以下支持的文件系统:
确保加载NFS内核模块:
bashmodprobe nfs nfsd
NFSv4要求额外共享目录必须是SHARED_DIRECTORY的子目录。
运行命令示例
bashdocker run -d --name nfs --privileged \ -v /some/where/fileshare:/nfsshare \ -v /some/where/else:/nfsshare/another \ -e SHARED_DIRECTORY=/nfsshare \ -e SHARED_DIRECTORY_2=/nfsshare/another \ itsthenetwork/nfs-server-alpine:latest
修改nfsd.sh添加共享
bashif [ ! -z "${SHARED_DIRECTORY_2}" ]; then echo "Writing SHARED_DIRECTORY_2 to /etc/exports file" echo "{{SHARED_DIRECTORY_2}} {{PERMITTED}}({{READ_ONLY}},{{SYNC}},no_subtree_check,no_auth_nlm,insecure,no_root_squash)" >> /etc/exports /bin/sed -i "s@{{SHARED_DIRECTORY_2}}@${SHARED_DIRECTORY_2}@g" /etc/exports fi
挂载多共享目录
bash# 挂载根共享 sudo mount -v 10.11.12.101:/ /mnt/one # 挂载子共享 sudo mount -v 10.11.12.101:/another /mnt/two
Writing SHARED_DIRECTORY to /etc/exports file The PERMITTED environment variable is unset or null, defaulting to '*'. This means any client can mount. The READ_ONLY environment variable is unset or null, defaulting to 'rw'. Clients have read/write access. The SYNC environment variable is unset or null, defaulting to 'async' mode. Writes will not be immediately written to disk. Displaying /etc/exports contents: /nfsshare *(rw,fsid=0,async,no_subtree_check,no_auth_nlm,insecure,no_root_squash) Starting rpcbind... Displaying rpcbind status... program version netid address service owner 100000 4 tcp6 ::.0.111 - superuser 100000 3 tcp6 ::.0.111 - superuser 100000 4 udp6 ::.0.111 - superuser 100000 3 udp6 ::.0.111 - superuser 100000 4 tcp 0.0.0.0.0.111 - superuser 100000 3 tcp 0.0.0.0.0.111 - superuser 100000 2 tcp 0.0.0.0.0.111 - superuser 100000 4 udp 0.0.0.0.0.111 - superuser 100000 3 udp 0.0.0.0.0.111 - superuser 100000 2 udp 0.0.0.0.0.111 - superuser 100000 4 local /var/run/rpcbind.sock - superuser 100000 3 local /var/run/rpcbind.sock - superuser Starting NFS in the background... rpc.nfsd: knfsd is currently down rpc.nfsd: Writing version string to kernel: -2 -3 +4 rpc.nfsd: Created AF_INET TCP socket. rpc.nfsd: Created AF_INET6 TCP socket. Exporting File System... exporting *:/nfsshare /nfsshare <world> Starting Mountd in the background... Startup successful.
dockerfileFROM alpine:latest LABEL maintainer "Steven Iveson <steve@iveson.eu>" LABEL source "https://github.com/sjiveson/nfs-server-alpine" LABEL branch "master" COPY Dockerfile README.md / RUN apk add --no-cache --update --verbose nfs-utils bash iproute2 && \ rm -rf /var/cache/apk /tmp /sbin/halt /sbin/poweroff /sbin/reboot && \ mkdir -p /var/lib/nfs/rpc_pipefs /var/lib/nfs/v4recovery && \ echo "rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0" >> /etc/fstab && \ echo "nfsd /proc/fs/nfsd nfsd defaults 0 0" >> /etc/fstab COPY exports /etc/ COPY nfsd.sh /usr/bin/nfsd.sh COPY .bashrc /root/.bashrc RUN chmod +x /usr/bin/nfsd.sh ENTRYPOINT ["/usr/bin/nfsd.sh"]
该镜像的源代码可在GitHub获取:https://github.com/sjiveson/nfs-server-alpine
感谢Torsten Bronger (@bronger) 对实现多阶段Docker构建以更好地处理Confd(现已移除)的建议和帮助。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。





探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务