如何在docker-compose中定义具有略有不同参数的多个服务?

6
有没有一种方法可以在docker-compose.yml文件中创建变量列表,并根据模板为每个变量创建服务?
例如:PARAMS=[name_a, name_b, name_c] 创建 3 个服务:
FOR param IN PARAMS:
    my-service-{param}:
        build: my-image
        container_name: my-container-{param}
        environment:
            NAME: {param}
            SOME_OTHER: ...

这段代码当然不能运行,但我认为功能很清楚。

这里有一个类似的问题,或许可以帮到你:https://dev59.com/vK_la4cB1Zd3GeqPnxts - Al.G.
1个回答

4

docker-compose 中没有此类功能。 最多您只能使用环境变量与值的组合。

话虽如此,您可以使用命令行模板引擎 mustache-cli 并将其用于生成 docker-compose.yml。

您可以使用以下命令安装 mustache:

sudo gem install mustache

安装后,您需要创建一个模板文件docker-compose.mustache和参数文件parameters.yml,并将它们组合在最终文件中,如下例所示:

parameters.yml

ports:
  - 10
  - 20
  - 30

docker-compose.mustache

version: "3.9"
services:
{{#ports}}
  web{{.}}:
    build: .
    ports:
      - "50{{.}}:5000"
  redis:
    image: "redis:alpine"
{{/ports}}

之后将它们组合起来

~# mustache parameters.yml docker-compose.mustache

version: "3.9"
services:
  web10:
    build: .
    ports:
      - "5010:5000"
  redis:
    image: "redis:alpine"
  web20:
    build: .
    ports:
      - "5020:5000"
  redis:
    image: "redis:alpine"
  web30:
    build: .
    ports:
      - "5030:5000"
  redis:
    image: "redis:alpine"

您可以在此链接上找到关于Mustache的好教程,该教程可以帮助您将当前的docker-compose.yml转换为模板。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接