Docker пока не имеет встроенного программного решения для совместного использования томов на нескольких машинах. Есть работа над infinit , но они ничего не выпустили для производственного использования.
Существуют сторонние решения для хранения данных, которые вы можете использовать. Если вы работаете в облачном провайдере, их решение, как правило, лучше всего подходит для вашего случая использования. Для самостоятельного программного решения вы можете использовать что-то вроде glusterfs. Приложения, которые сами обрабатывают репликацию данных, являются идеей для контейнеров, например cockroachdb.
Типичное автономное решение - использовать NFS. Даже с облачными провайдерами я обычно использую их метод NFS для монтирования хранилища. Из докера это выглядит следующим образом:
# create a reusable volume
$ docker volume create --driver local \
--opt type=nfs \
--opt o=nfsvers=4,addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
foo
# or from the docker run command
$ 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
# or to create a service
$ 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
# or inside a docker-compose file
...
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=192.168.1.1,rw
device: ":/path/to/dir"
...
Обратите внимание, что IP-адреса в каждом из них могут быть именами хостов, если вы сохраняете тип nfs.