Docker 如何使用 NFS Volume,多个容器使用 NFS Volume 的便捷用法。

文中方法适合 docker 17.06 之后版本,使用docker version 确认。

在容器创建时使用下面命令直接挂载:

1
2
3
docker run -it --name nfs-test \
--mount 'type=volume,source=nfsvolume,target=/mnt,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/rxt68s30,"volume-opt=o=addr=172.21.0.99,rw,vers=3,nolock,proto=tcp,noresvport"' \
alpine ash

查看生成的 volume 信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# docker volume inspect nfsvolume
[
    {
        "CreatedAt": "2021-09-22T14:22:27+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nfsvolume/_data",
        "Name": "nfsvolume",
        "Options": {
            "device": ":/rxt68s30",
            "o": "addr=172.21.0.99,rw,vers=3,nolock,proto=tcp,noresvport",
            "type": "nfs"
        },
        "Scope": "local"
    }
]

这里 volume 详细信息里会有默认的 Mountpoint 地址 [/var/lib/docker/volumes/nfsvolume/_data],容器启动后,在宿主机上该位置也可以访问到 nfs 里挂载的文件内容,可以延伸出更多用法。

参考上面生成信息,来手动创建 nfs volume:

1
2
3
4
5
docker volume create nfsvolume \
-d local \
-o type=nfs \
-o o=addr=172.21.0.99,rw,vers=3,nolock,proto=tcp,noresvport \
-o device=:/rxt68s30

启动容器时,映射使用 nfsvolume :

1
docker run --rm -v nfsvolume:/mnt alpine ls /mnt

Done!