我有这样的文件:

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

#1楼 票数:5 已采纳

有几种选择。 如果使用.env docker-compose而不是.env 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文件并且想要执行.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语法中添加了扩展字段 这使您可以定义与任何服务定义分开的锚点,并将其合并到每个服务中,每个服务都有自己的唯一值,例如:

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"

  ask by gstackoverflow translate from so

未解决问题?本站智能推荐:

1回复

在docker-compose中声明变量

我想让我的应用程序知道它运行的是哪个映像版本。 我们的想法是将Docker图像标记作为环境变量传递给图像。 但是我不想一直在图像行和ENV变量行中更改版本号。 例: 是否可以声明变量以便一起更新所有值,或者是否有其他可用的解决方案?
2回复

如何为Docker-compose文件设置var?

我提出了一个应用程序,需要在我们的实验室进行测试。 我的同事已完成docker-compose.yml文件,但今天没有人在办公室,而我在此文件中的一行丢失了: 因为当我执行docker-compose -f docker-compose-mgmt.yml pull ,出现错误DOCKERA
2回复

传递ENV变量不适用于docker-compose

我正在努力使用docker-compose传递ENV变量 我有一个Dockerfile来使用Java应用程序构建容器: 然后,docker撰写文件: 最后,通过bash命令启动容器: 但docker inspect显示没什么大有希望。 变量未正确设置(它们使用dockerfil
2回复

如何通过docker-compose将变量从Makefile传递到Python脚本

我有一个 Makefile,它运行一个 docker-compose,它有一个执行 python 脚本的容器。 我希望能够将命令行中的变量传递给 Makefile 并在 python 脚本( testing.py )中打印它。 我的目录看起来像: 我尝试过以下配置。 生成文件是: docker-c
1回复

将变量发送到Docker容器中以在脚本中使用

我正在管道的CI / CD中运行脚本。 目的是获得一个字符串。 得到该结果后,将其保存到变量中,然后将结果保存在dockerfile的yaml文件中。 我想将该变量从CI环境传递到docker-compose容器中。 因此,我尝试将其导出,就像导出其他内容一样,但是它不起作用:
1回复

Docker-compose-使用脚本将环境变量传递给Flask

这是我在主机上的项目结构: set_env_vars.sh 我像这样运行: docker-compose-dev.yml 配置文件 授权文件 但我收到以下错误: 我错过了什么?
1回复

有没有办法从docker堆栈创建全局服务?

我正在尝试使用docker compose文件创建一个swarm堆栈。 是否可以指定我的服务是全局的,并且应该在每个节点上运行一个实例? 我当前的Docker撰写文件:
2回复

有没有办法停止单个docker服务并删除其分配的卷?

我想知道(但搜索似乎另有说明)是否有一个 docker 命令来停止单个服务并删除其分配的卷。 相当于运行: 1 - docker-compose stop <service name> 2 - docker volume rm <volumes_attached_to_serv