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的地址
我正在使用 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的地址