Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用docker compose而不使用--scale指定容器的数量?_Docker_Docker Compose_Replication - Fatal编程技术网

如何使用docker compose而不使用--scale指定容器的数量?

如何使用docker compose而不使用--scale指定容器的数量?,docker,docker-compose,replication,Docker,Docker Compose,Replication,在我的docker compose中,我有多个客户机和工人类,特别是a型客户机、B型客户机和C型客户机,以及各自的工人类。每次执行docker compose时,如果要为每个类使用不同于1的容器数量,我需要使用选项--scale总共6次:--scale cliA=2--scale cliB=3[…]。除了在mydocker compose.yml上创建类,而是为客户机创建一个统一的类,该类可以针对每个不同的类进行不同的缩放(对于工人也是如此),还有其他方法吗 我对此进行了论证,并得出结论,可以这

在我的
docker compose
中,我有多个客户机和工人类,特别是a型客户机、B型客户机和C型客户机,以及各自的工人类。每次执行
docker compose
时,如果要为每个类使用不同于1的容器数量,我需要使用选项
--scale
总共6次:
--scale cliA=2--scale cliB=3[…]
。除了在my
docker compose.yml
上创建类,而是为客户机创建一个统一的类,该类可以针对每个不同的类进行不同的缩放(对于工人也是如此),还有其他方法吗

我对此进行了论证,并得出结论,可以这样做(检查问题末尾的代码,以获取
cli
类的参考):

这个
docker compose.yml
将能够根据需要创建类,而无需每次调用
--scale
。然而,我已经检查过了,但是我没有发现任何对我有帮助的东西。我发现了一个提到我可以使用docker swarm来完成这项任务的例子,但我认为这超出了主题的范围(这个问题是为了回答一个练习)

以下是docker compose.yml文件的代码:

version: '2'
services:
  cliA:
    image: client
    build: ./client/
    links:
      - bro
    environment:
      - BROKER_URL=tcp://bro:9998
      - CLASSID=A
  // Similar description for cliB, cliC; only CLASSID changes

  worA:
    image: worker
    build: ./worker/
    links:
      - bro
    environment:
      - BROKER_URL=tcp://bro:9999
      - CLASSID=A
  // Similar description for worB, worC; only CLASSID changes

  bro:
    image: broker
    build: ./broker/
    expose:
      - "9998"
      - "9999"

非常感谢您的帮助。

服务是关于如何运行容器以及所有设置的定义。如果需要使用不同设置运行多个容器,则需要不同的服务。您可以使用Yaml别名和锚定语法有效地将一个服务复制到另一个服务,然后应用更改,例如:

version: "3"
services:
  app1: &app1
    image: app
    environment:
      app: 1
  app2:
    <<*app1
    environment:
      app: 2
然后可以使用各种环境文件进行部署:

$ cat envA.sh
CLASSID=A
SCALE=4
$ cat envB.sh
CLASSID=B
SCALE=2
$ set -a && . ./envA.sh && set +a && docker-compose -p projA up
$ set -a && . ./envB.sh && set +a && docker-compose -p projB up

服务是如何运行容器以及所有设置的定义。如果需要使用不同设置运行多个容器,则需要不同的服务。您可以使用Yaml别名和锚定语法有效地将一个服务复制到另一个服务,然后应用更改,例如:

version: "3"
services:
  app1: &app1
    image: app
    environment:
      app: 1
  app2:
    <<*app1
    environment:
      app: 2
然后可以使用各种环境文件进行部署:

$ cat envA.sh
CLASSID=A
SCALE=4
$ cat envB.sh
CLASSID=B
SCALE=2
$ set -a && . ./envA.sh && set +a && docker-compose -p projA up
$ set -a && . ./envB.sh && set +a && docker-compose -p projB up

这个问题在我看来像是重复的。你能解释一下你的问题与我的问题有什么不同吗?你链接的问题(我在声明中也链接了这个问题)的OP只想在多个容器中运行单个图像;我需要在多个容器中运行一个图像,但要更改一些参数。这个问题对我来说像是重复的。你能解释一下你的问题与我的问题有什么不同吗?你链接的问题(我在声明中也链接了这个问题)的OP只想在多个容器中运行单个图像;我需要在多个容器中运行一个映像,但需要更改一些参数。第二种方法是我正在寻找的方法,将不同类型的客户端统一到一个容器中。我不知道教授们是否在想这个答案,但这肯定是有道理的。谢谢第二种方法是我正在寻找的,将不同类型的客户机统一为一个。我不知道教授们是否在想这个答案,但这肯定是有道理的。谢谢