加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

docker comp中有没有办法创建交叉服务常量?

发布时间:2020-12-16 03:52:30 所属栏目:安全 来源:网络整理
导读:我有这样的文件: service1: //some stuff environment: - "PROP=some_common_value"service2: //some stuff environment: - "PROP=some_common_value"service2: //some stuff environment: - "PROP=some_common_value" 我想设置具有相同值的属性. 我现在可

我有这样的文件:

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 comp中有没有办法创建交叉服务常量?

最佳答案
有几种选择.如果使用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堆栈部署,则可以使用以下任一方法编写处理脚本:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读