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

MrF*_*fer 6 docker docker-compose

有没有办法在文件中创建变量列表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: ...
Run Code Online (Sandbox Code Playgroud)

这段代码当然不起作用,但我相信功能很清楚。

jor*_*ski 4

中没有这样的功能docker-compose。您最多可以将环境变量与值结合使用。

话虽如此,您可以使用 cli 模板引擎并mustache-cli使用它来生成 docker-compose.yml。

你可以安装小胡子

sudo gem install mustache
Run Code Online (Sandbox Code Playgroud)

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

参数.yml

ports:
  - 10
  - 20
  - 30
Run Code Online (Sandbox Code Playgroud)

docker-compose.mustache

version: "3.9"
services:
{{#ports}}
  web{{.}}:
    build: .
    ports:
      - "50{{.}}:5000"
  redis:
    image: "redis:alpine"
{{/ports}}
Run Code Online (Sandbox Code Playgroud)

然后将它们结合起来

~# 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"

Run Code Online (Sandbox Code Playgroud)

您可以在此链接上找到有关胡子的良好教程,它可以帮助您将当前内容转换docker-compose.yml为模板。