Docker-compose:仅在第一个容器中安装一个卷

我正在使用docker compose来运行一个MariaDB Galera集群,其中每个节点都是一个docker容器,但是MariaDB GC在启动时需要一个主节点来初始化数据库。

我想select主容器,通过在容器中挂载一个文件作为卷,并在脚本启动时检查这个文件。 所以我需要docker-compose来挂载这个文件,只是为了启动第一个容器,而不是通过执行docker-compose scale创build的容器。

可能吗 ?

你想做的事情不是直接可能的; 当使用docker-compose scale你会得到一套相同的容器。 您有几个选项可用于为您的Galera群集select主节点。 这里有两个; 无疑有其他:

显式的主要

主要是您docker-compose.yaml文件中的单实例容器,并且只扩展辅助容器。

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

dynamic主要

如果你愿意写一些代码,你可能可以使用etcd来执行主选举,可能是利用primefaces创build密钥的能力。

我没有这个方便的例子,但过程应该是相对简单的:

  • 每个节点都试图在etcd中创build一个特定的密钥
  • 成功的节点是主人
  • 其他节点可以查询etcd的主地址