Docker-compose: Mount a volume only in the first container

I’m using docker compose to run a MariaDB Galera Cluster, where each node is a docker container, but MariaDB GC need a master node at start to initialize the database.

I’d like to choose the master container by mounting a file as a volume in the container, with a script at start which check for this file. So I need docker-compose to mount the file only for the first container launched and not for the container created by doing docker-compose scale.

  • How to run cron in Docker container from Ruby image
  • Artifactory Professional License - NFS
  • ERROR: undefined method `closed?' for nil:NilClass
  • How to properly give argument to docker entrypoint when building a container (docker run …)?
  • docker commit fails with “no such id”
  • Should I scale down Openshift app's replicas before deleting its resources?
  • Is it possible ?

  • Docker (rails) - Changes in server side code, require restart app
  • Datadog integration inside docker containers
  • Docker-Swarm, Kubernetes, Mesos & Core-OS Fleet
  • How to workaround “the input device is not a TTY” when using grunt-shell to invoke a script that calls docker run?
  • Linux Docker and the underlying caching, nscd, hosts
  • DOCKER_OPTS are reset after system reboot
  • One Solution collect form web for “Docker-compose: Mount a volume only in the first container”

    What you want to do is not directly possible; when using docker-compose scale you will get a suite of identical containers. You have several options available for selecting a primary node for your Galera cluster. Here are two; there are undoubtedly others:

    Explicit primary

    Have the primary be a single-instance container in your docker-compose.yaml file, and only scale the secondary containers.

    galera_primary:
        image: myimage
        command: command_to_start_galera_master
    
    galera_secondary:
      image: myimage
      links:
        - galera_primary
      command: command_to_start_galera_worker
    

    Dynamic primary

    If you’re willing to write some code, you could probably use etcd to perform master election, probably by taking advantage of the ability to atomically create keys.

    I don’t have an example of this handy, but the process should be relatively simple:

    • Each node attempts to create a particular key in etcd
    • The node that succeeds is the master
    • Other nodes can query etcd for the address of the master
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.