首页 > 解决方案 > 如何确定扩容服务的副本数

问题描述

我有一个 docker-compose 文件,它公开了 2 个服务,一个主服务和一个从服务。我希望能够使用从服务扩展到一定数量的实例

docker-compose up --scale slave=N

但是,我必须在主服务中运行的命令中指定的选项之一是预期的从属实例的数量。例如,如果我缩放 slave=10,我需要在主服务的命令中设置 --num-slaves=10。

有没有办法从 docker-compose 文件本身或自定义入口点 shellscript 确定给定服务的实例数?

我面临的问题是,由于我还没有找到从 docker-compose 文件格式本身指定缩放实例的数量,所以我依靠运行命令的人输入比例因子一致并且使该值与我需要告诉主节点期望的值保持一致。相信用户做正确的事是灾难的根源。如果我可以继续让用户在命令行上指定比例值,我需要一种方法来确定该值在运行时是什么。

标签: dockerdocker-compose

解决方案


不幸的是,没有办法为 docker compose 定义副本。它仅适用于 DOCKER SWARM文档指定它链接

提示:或者,在 Compose 文件版本 3.x 中,您可以在部署键下指定副本作为 Swarm 模式的服务配置的一部分。部署键及其子选项(包括副本)仅适用于 docker stack deploy 命令,不适用于 docker-compose up 或 docker-compose run。

所以如果你在 yaml 中有 deploy 部分,但是用 docker-compose 运行它,那么它不会生效。

version: "3.3"

services:
  alpine1:
    image: alpine
    container_name: alpine1
    command: ["/bin/sleep", "10000"]
    deploy:
      replicas: 4
  alpine2:
    image: alpine
    container_name: alpine2
    command: ["/bin/sleep", "10000"]
    deploy:
      replicas: 2

因此,在 docker compose 中扩大规模的唯一方法是手动运行 scale 命令。

docker-compose scale alpine1=3

注意我有一份他们喜欢 docker-compose 的工作,所以我们有 bash 脚本来执行你描述的操作。所以例如我们会有类似的东西./controller-app.sh scale test_service=10,它会运行docker-compose scale test_service=10

更新 要检查副本的数量,您可以将 docker 套接字安装到您的容器中。然后运行docker ps --format {{ .Names }} | grep $YOUR_CONTAINER_NAME

这是安装插座的方法。

docker run -v  /var/run/docker.sock:/var/run/docker.sock -it alpine sh

安装泊坞窗

apk update
apk add docker

推荐阅读