docker swarm 怎么定义nfs共享卷?
来源:6-2 集群环境搭建(上)

zac707
2025-03-31
1回答
-
刘果国
2025-04-21
在 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 服务器。
00
相似问题