docker compose中是否有创建跨服务常量的方法?

docker compose中是否有创建跨服务常量的方法?,docker,variables,duplicates,docker-compose,code-duplication,Docker,Variables,Duplicates,Docker Compose,Code Duplication,我编写了如下文件: 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 compose中是否有创建跨服务常量的方法?

有几个选项。如果使用
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}
或者显式使用变量,如:

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中的合并,我切换到key/value而不是数组语法):

service1:
环境:&公共环境
道具:“一些共同的价值”
服务2:
环境:*公共环境
服务3:
环境: