Search code examples
dockercassandradocker-composedocker-swarmelassandra

How to Share a Docker-Compose Volume in Distributed Cassandra Container using Docker


I have configured distributed version of cassandra using Docker-Compose.

Here is my docker-compose.yml file:

version: '3.0'
services:
  cassandra-masters:
    image: strapdata/elassandra
    environment:
      CASSANDRA_LISTEN_ADDRESS: tasks.cassandra-masters    
  cassandra-slaves1:
    image: strapdata/elassandra
    environment:
      CASSANDRA_SEEDS: tasks.cassandra-masters
      CASSANDRA_LISTEN_ADDRESS: tasks.cassandra-slaves1
    depends_on:
     - cassandra-masters

After running the docker-compose file using sudo docker stack deploy elassandra --compose-file docker-compose.yml, everything works well and I can see them using docker service ls command.

Problem: What I want is that I don't know how to use volume in distributed of containers. Is it like the normal configuration of docker-compose that found in Docker's site? or it is different?


Solution

  • Solution I have tried the named volumes like the following, There isn't any difference between this approach (distributed) and normal approach. The only thing that should be considered is that the volume should be shared:

    version: '3.0'
    services:
      cassandra-masters:
        image: strapdata/elassandra
        environment:
          CASSANDRA_LISTEN_ADDRESS: tasks.cassandra-masters
        volumes:
         - app-volume:/var/lib/cassandra
    
      cassandra-slaves1:
        image: strapdata/elassandra
        environment:
          CASSANDRA_SEEDS: tasks.cassandra-masters
          CASSANDRA_LISTEN_ADDRESS: tasks.cassandra-slaves1
        depends_on:
         - cassandra-masters
        volumes:
         - app-volume:/var/lib/cassandra
    volumes:
      app-volume: