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.

  • Ansible - playbook dynamic verbosity
  • Failed to create the host-only adapter - windows 10, docker, virtualbox
  • Stand up select services with docker-compose
  • Making multiple Docker Machines accessible across local network. Linux & Mac
  • Rancher with postgresql
  • Deploying latest docker containers with ansible
  • Is it possible ?

  • add hosts redirection in docker
  • How to mount volume for docker container via yaml manifest?
  • Docker how to create container
  • Can I mount same volume to multiple docker containers
  • Circle CI Docker service does not cache COPY
  • Downloading Gradle in Docker Container
  • 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.