我在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
将文件添加到此文件夹时,第二个容器看不到创建的文件。
如何配置swarm以便文件在两个容器中都可见?
答案 0 :(得分:25)
通过默认驱动程序在docker swarm中创建的卷是节点的本地。因此,如果您将两个容器放在同一主机上,则它们将具有共享卷。但是当您将容器放在不同的节点上时,每个节点上都会创建一个单独的卷。
现在,为了在多个节点上实现绑定装载/卷,您可以选择以下选项:
使用群集文件系统,如glusterfs,ceph和...跨群集节点,然后在服务保护中使用绑定挂载指向共享fs。
使用docker提供的众多存储驱动程序之一,提供flocker等共享存储,...
切换到Kubernetes,并通过存储类和声明使用多个后端来利用自动卷配置。
更新:正如@Krishna在评论中指出的那样,Flocker已被关闭,github repo上没有很多活动。