Docker-compose: 只在第一个容器中挂载卷

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

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

我想通过在容器中将文件作为卷装载来选择主容器,并在启动时使用脚本来检查该文件。所以我需要 docker-compose 只为第一个启动的容器安装文件,而不是通过 docker-compose scale.

创建的容器

可以吗?

你想做的事情不是直接可能的;使用 docker-compose scale 时,您将获得一套相同的容器。您有几个选项可用于为您的 Galera 集群选择一个主节点。这里有两个;毫无疑问还有其他人:

显式主要

在您的 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

动态初级

如果您愿意编写一些代码,您可能会使用 etcd to perform master election, probably by taking advantage of the ability to atomically create keys

手头没有这个例子,不过过程应该比较简单:

  • 每个节点都尝试在 etcd 中创建一个特定的密钥
  • 成功的节点为master
  • 其他节点可以向etcd查询master的地址