我有这样的文件:
@H_404_6@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内部,您将使用环境变量,如:
原文链接:https://www.f2er.com/docker/436672.html@H_404_6@service1: environment: - PROP service2: environment: - PROP service2: environment: - PROP
或明确使用变量,如:
@H_404_6@service1: environment: - PROP=${PROP} service2: environment: - PROP=${PROP} service3: environment: - PROP=${PROP}
如果您有.env文件并且想要执行docker堆栈部署,则可以使用以下任一方法编写处理脚本:
@H_404_6@# 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中设置的变量:
@H_404_6@PROP=some_common_value
下一个选项是使用锚点和别名的Yaml语法.这从Yaml文件的一个部分复制到另一个部分(为了支持在service3中合并,我切换到键/值而不是数组语法):
@H_404_6@service1: environment: &common_env PROP: "some_common_value" service2: environment: *common_env service3: environment: <<: *common_env PROP3: "unique value"
为了使每个服务具有唯一值,Docker在最新版本的compose语法中添加了extension fields.这使您可以定义与任何服务定义分开的锚点,并将其合并到每个服务中,每个服务都有自己的唯一值,例如:
@H_404_6@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"