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

标签 docker docker-compose

我正在使用 docker compose 来运行 MariaDB Galera Cluster,其中每个节点都是一个 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执行主选举,可能是利用 atomically create keys 的能力.

我没有这个方便的例子,但过程应该相对简单:
  • 每个节点都尝试在 etcd
  • 中创建一个特定的 key
  • 成功的节点是master
  • 其他节点可以通过etcd查询master的地址
  • 关于Docker-compose:仅在第一个容器中安装卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508576/

    相关文章:

    docker - 无法让 PyC​​harm 在 docker 上使用远程解释器

    docker - 为什么 docker-compose 说网络未定义,但 "docker network ls"显示它?

    docker - 如何在 windows/virtualbox 设置上将 ./project_dir 作为 docker-compose 中的卷挂载

    docker - 来自守护进程 : conflict: unable to delete 2602b4852593 (cannot be forced) - image has dependent child images 的错误响应

    azure - 跳过 Azure DevOps 中的管道阶段

    postgresql - 使用Docker Compose Psql进行Knex迁移

    node.js - docker 组成Django和 Node

    docker - 使用 compose 有序构建嵌套 docker 镜像

    virtualization - 将纯数据 Docker 容器从一台机器移动到另一台机器的正确方法

    linux - Docker 加载代理环境变量失败