Docker Swarm 的节点之间不共享卷
Volume is not shared between nodes of 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
将文件添加到此文件夹时,第二个容器看不到创建的文件。
如何配置群以使文件在两个容器中都可见?
通过默认驱动程序在 docker swarm 中创建的卷是节点本地的。因此,如果您将两个容器放在同一台主机上,它们将有一个共享卷。但是当你把你的容器放在不同的节点上时,每个节点上都会创建一个单独的卷。
现在,为了实现跨多个节点的绑定 mounts/volumes,您有以下选择:
跨 swarm 节点使用像 glusterfs、ceph 和...这样的集群文件系统,然后在指向共享文件系统的服务定义中使用绑定挂载。
使用 docker 提供共享存储的众多存储驱动程序之一,例如 flocker,...
切换到 Kubernetes 并通过存储 类 和声明利用使用多个后端的自动卷配置。
更新:正如@Krishna 在评论中指出的那样,Flocker 已被关闭并且 github repo 上没有很多 activity。
我在 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
将文件添加到此文件夹时,第二个容器看不到创建的文件。
如何配置群以使文件在两个容器中都可见?
通过默认驱动程序在 docker swarm 中创建的卷是节点本地的。因此,如果您将两个容器放在同一台主机上,它们将有一个共享卷。但是当你把你的容器放在不同的节点上时,每个节点上都会创建一个单独的卷。
现在,为了实现跨多个节点的绑定 mounts/volumes,您有以下选择:
跨 swarm 节点使用像 glusterfs、ceph 和...这样的集群文件系统,然后在指向共享文件系统的服务定义中使用绑定挂载。
使用 docker 提供共享存储的众多存储驱动程序之一,例如 flocker,...
切换到 Kubernetes 并通过存储 类 和声明利用使用多个后端的自动卷配置。
更新:正如@Krishna 在评论中指出的那样,Flocker 已被关闭并且 github repo 上没有很多 activity。