
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该镜像由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(现已移除)的建议和帮助。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务