Tengo problemas para compartir una carpeta entre contenedores Docker que se ejecutan en diferentes nodos de Docker Swarm. Mi enjambre consta de un gerente y dos trabajadores.
Estoy usando este archivo de redacción para implementar aplicaciones:
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:
Puedo confirmar que la carpeta se montó con éxito en ambos contenedores con el uso de docker exec _id_ ls /test
. Pero cuando agrego un archivo a esta carpeta con docker exec _id_ touch /test/file
segundo contenedor no ve el archivo creado.
¿Cómo configurar el enjambre para que los archivos sean visibles en ambos contenedores?
Los volúmenes creados en Docker Swarm a través del controlador predeterminado son locales para el nodo. Entonces, si coloca ambos contenedores en el mismo host, tendrán un volumen compartido. Pero cuando coloca sus contenedores en diferentes nodos, se creará un volumen separado en cada nodo.
Ahora, para lograr montajes/volúmenes enlazados en múltiples nodos, tiene estas opciones:
Use un sistema de archivos de clúster como glusterfs, ceph y ... en nodos de enjambre, luego use montajes de enlace en su definición de servicio apuntando a fs compartidos.
Utilice uno de los muchos controladores de almacenamiento disponibles para docker que proporcionan almacenamiento compartido como flocker,...
Cámbiese a Kubernetes y aproveche el aprovisionamiento de volumen automatizado utilizando múltiples backends a través de clases y reclamaciones de almacenamiento.
ACTUALIZACIÓN: Como señaló @Krishna en los comentarios, Flocker se cerró y no hay mucha actividad en el repositorio de github .