Docker目前还没有内置的基于软件的解决方案来在多台机器之间共享卷。虽然有关于infinit的工作,但他们还没有发布任何可供生产使用的东西。
有第三方存储解决方案可供使用。如果您使用云提供商,则其解决方案通常最适合您的用例。对于自托管的软件解决方案,您可以使用类似glusterfs的东西。处理数据复制本身的应用程序非常适合容器,例如cockroachdb。
典型的自托管解决方案是退回到NFS。即使在云提供商中,我通常使用它们的NFS方法来挂载存储。从docker中,看起来像以下内容:
$ docker volume create --driver local \
--opt type=nfs \
--opt o=nfsvers=4,addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
foo
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
foo
$ docker service create \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
foo
...
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=192.168.1.1,rw
device: ":/path/to/dir"
...
请注意,只要您保持nfs的类型不变,每个IP地址都可以是主机名。