Docker Swarm的节点之间不共享卷

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

我正在使用此compose文件来部署应用程序:

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将文件添加到这个文件夹中时,第二个容器看不到创建的文件.

如何配置swarm以便文件在两个容器中都可见?

最佳答案
通过默认驱动程序在docker swarm中创建的卷是节点的本地卷.因此,如果您将两个容器放在同一主机上,则它们将具有共享卷.但是当您将容器放在不同的节点上时,每个节点上都会创建一个单独的卷.

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

>使用群集文件系统,如glusterfs,ceph和…跨群集节点,然后在服务defenition中使用绑定挂载指向共享fs.
>使用docker提供的众多存储驱动程序之一,提供flocker等共享存储,…
>切换到Kubernetes并通过存储类和声明使用多个后端来利用自动卷配置.

更新:正如@Krishna在评论中指出的那样,Flocker已经关闭,github repo上没有很多活动.

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...