【问题标题】:Volume is not shared between nodes of Docker SwarmDocker Swarm 的节点之间不共享卷
【发布时间】:2017-03-08 13:05:14
【问题描述】:

我在 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 docker-compose docker-swarm


【解决方案1】:

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

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

  1. 跨 swarm 节点使用 glusterfs、ceph 等集群文件系统,然后在指向共享 fs 的服务定义中使用绑定挂载。

  2. 使用可用于 docker 的众多存储驱动程序之一,这些驱动程序提供共享存储,如植绒、...

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

更新:正如@Krishna 在 cmets 中指出的那样,Flocker 已关闭,github repo 上没有太多活动。

【讨论】:

  • Flocker 一直是shut downgithub repo 上没有很多活动。
  • 所以基本上唯一的选择是使用绑定挂载和集群文件系统?目前,我将我的 Postgres 容器放置在集群中我唯一的管理器上,该管理器具有传统的本地卷。您还有其他建议吗?
猜你喜欢
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
相关资源
最近更新 更多