请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

1回答

刘果国 2025-04-21 11:05:50

在 Docker Swarm 中定义 NFS 共享卷可以通过以下步骤实现:


1. 确保 NFS 服务器已配置

首先确保你有一个可用的 NFS 服务器,并已导出共享目录。例如:


bash

# 在 NFS 服务器上编辑 /etc/exports

/path/to/share  *(rw,sync,no_subtree_check,no_root_squash)

然后重启 NFS 服务:


bash

sudo systemctl restart nfs-server

2. 在 Docker Swarm 节点上安装 NFS 客户端

所有 Swarm 节点(包括管理节点和工作节点)需要安装 NFS 客户端工具:


bash

# Ubuntu/Debian

sudo apt-get install nfs-common -y


# CentOS/RHEL

sudo yum install nfs-utils -y

3. 创建 Docker Volume 驱动为 NFS

在 Swarm 中创建一个全局可用的 NFS 卷:


bash

docker volume create \

  --driver local \

  --opt type=nfs \

  --opt o=addr=<NFS_SERVER_IP>,rw \

  --opt device=:<NFS_EXPORTED_PATH> \

  nfs_volume

<NFS_SERVER_IP>:NFS 服务器的 IP 地址。

<NFS_EXPORTED_PATH>:NFS 服务器导出的路径(如 /path/to/share)。

4. 在 Stack 或 Service 中使用 NFS 卷

在 docker-compose.yml 或 Stack 文件中定义服务时挂载 NFS 卷:


示例 docker-compose.yml:

yaml

version: '3.8'


services:

  web:

    image: nginx:latest

    volumes:

      - nfs_volume:/usr/share/nginx/html

    deploy:

      replicas: 2


volumes:

  nfs_volume:

    driver: local

    driver_opts:

      type: nfs

      o: addr=<NFS_SERVER_IP>,rw

      device::<NFS_EXPORTED_PATH>

部署 Stack:

bash

docker stack deploy -c docker-compose.yml my_stack

5. 验证卷挂载

进入容器检查挂载点:


bash

docker exec -it <CONTAINER_ID> ls /usr/share/nginx/html

或在宿主机上检查卷信息:


bash

docker volume inspect nfs_volume

关键注意事项

NFS 服务器高可用:确保 NFS 服务器高可用,避免单点故障。

权限问题:NFS 导出的目录权限需允许容器用户(如 nginx 用户)读写。

性能调优:根据需求调整 NFS 挂载选项(如 async、noatime)。

跨节点一致性:所有 Swarm 节点必须能访问 NFS 服务器。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号