【问题标题】:Is there way in docker compose to create the cross service constant?docker compose 有没有办法创建交叉服务常量?
【发布时间】:2018-10-12 14:53:11
【问题描述】:

我有这样的撰写文件:

service1:
   //some stuff
   environment:
  - "PROP=some_common_value"
service2:
  //some stuff
  environment:
  - "PROP=some_common_value"
service2:
  //some stuff
  environment:
  - "PROP=some_common_value"

我想设置具有相同值的属性。

我现在可以复制该值。看起来很糟糕。
docker compose 有办法创建跨服务常量吗?

【问题讨论】:

    标签: docker variables duplicates docker-compose code-duplication


    【解决方案1】:

    有几个选项。如果您使用docker-compose 而不是docker stack deploy 进行部署,那么您可以使用.env 文件来设置变量。或者使用 docker-compose 或 swarm 模式,您可以在 shell 中设置环境变量(通常是用于部署应用程序的 shell 脚本)。在 yaml 内部,您可以使用如下环境变量:

    service1:
      environment:
      - PROP
    service2:
      environment:
      - PROP
    service2:
      environment:
      - PROP
    

    或显式使用如下变量:

    service1:
      environment:
      - PROP=${PROP}
    service2:
      environment:
      - PROP=${PROP}
    service3:
      environment:
      - PROP=${PROP}
    

    如果您有一个 .env 文件并想要创建一个 docker stack deploy,您可以使用以下任一脚本处理该文件:

    # option 1, leaves vars set in shell
    set -a && . .env && set +a && docker stack deploy -c compose.yml stack_name
    
    # option 2, only sets vars for single command
    env $(cat .env | xargs) docker stack deploy -c compose.yml stack_name
    

    在上述每一项中,.env 只是您可以在 shell 中设置的变量:

    PROP=some_common_value
    

    下一个选项是使用锚点和别名的 Yaml 语法。这从 Yaml 文件的一个部分复制到另一个部分(为了支持 service3 中的合并,我切换到键/值而不是数组语法):

    service1:
      environment: &common_env
        PROP: "some_common_value"
    service2:
      environment: *common_env
    service3:
      environment:
        <<: *common_env
        PROP3: "unique value"
    

    为了让每个服务都有唯一的值,Docker 在 compose 语法的最新版本中添加了extension fields。这使您可以定义与任何服务定义分开的锚点并将其合并到每个服务中,每个服务都有自己的唯一值,例如:

    version: '3.4'
    x-common-env: &common_env
      PROP: "some_common_value"
    services:
      service1:
        environment:
          <<: *common_env
          PROP1: "unique value 1"
      service2:
        environment:
          <<: *common_env
          PROP2: "unique value 2"
      service3:
        environment:
          <<: *common_env
          PROP3: "unique value 3"
    

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 2020-05-19
      • 1970-01-01
      • 2023-02-02
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多