简体   繁体   中英

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.

Is it possible ?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM