卷不在Docker Swarm的节点之间共享

我遇到了在Docker Swarm的不同节点上运行的Docker容器之间共享文件夹的问题。 我的团队由一名经理和两名工人组成。

我正在使用这个撰写文件来部署应用程序:

version: '3' services: redis: image: redis:latest networks: - default ports: - 6379:6379 volumes: - test-volume:/test deploy: replicas: 1 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure placement: constraints: [node.role == manager] logstash: image: docker.elastic.co/logstash/logstash:5.2.2 networks: - default volumes: - test-volume:/test deploy: placement: constraints: [node.role == worker] networks: default: external: false volumes: test-volume: 

我可以使用docker exec _id_ ls /test来确认这个文件夹是成功安装在两个容器中的。 但是,当我使用docker exec _id_ touch /test/file第二个容器将文件添加到此文件夹中时,看不到已创build的文件。

如何configurationswarm使文件在两个容器中都可见?

在docker swarm中通过默认驱动创build的卷对于节点是本地的。 所以如果你把两个容器放在同一个主机上,他们将有一个共享卷。 但是,当您将容器放在不同的节点上时,将在每个节点上创build一个单独的卷。

现在为了实现跨多个节点的绑定挂载/卷,您可以使用以下选项:

  1. 使用集群文件系统,如群集节点上的glusterfs,ceph和…,然后使用指向共享fs的服务定义中的绑定挂载。

  2. 使用docker提供的许多存储驱动程序之一,像flocker一样提供共享存储,…

  3. 切换到Kubernetes,并通过存储类和声明使用多个后端来利用自动卷configuration。

更新:正如@Krishna在评论中指出,Flocker已经closures, github回购站上没有太多的活动。