【问题标题】:Can i set a variable in docker compose and use it more than once for more clear code?我可以在 docker compose 中设置一个变量并多次使用它以获得更清晰的代码吗?
【发布时间】:2020-11-16 10:21:52
【问题描述】:

我可以在 docker-compose yml 文件中设置一个变量以获得更清晰的代码吗?

例如,如果有一个值我使用了不止一次,并且我想通过一个声明来保留它

喜欢:

version: '2.4'
ValueToPassFromVariable: '2020-10-10 12:00:00'

services:
  img1:
     image: img1
     build:
       context: .
       args:
         - STARTDATE=ValueToPassFromVariable
       dockerfile: DockerFileImg1
       
  img2:
     image: img2
     build:
       context: .
       args:
         - STARTDATE=ValueToPassFromVariable
       dockerfile: DockerFileImg2

我想在ValueToPassFromVariable 中保存一些价值并使用它几次,我可以这样做吗?

【问题讨论】:

    标签: docker docker-compose yaml


    【解决方案1】:

    你有两个选择:

    1. 创建 .env 文件并将其放入 docker-compose 根目录。 .env 文件示例:
    STARTDATE=value
    
    1. 使用命令直接添加环境变量构建机器

    Linux

    export STARTDATE=value
    

    对于 Windows

    setx STARTDATE value
    

    在 docker-compose 之后你需要使用这个值。

    例子:

    version: '2.4'
    ValueToPassFromVariable: '2020-10-10 12:00:00'
    
    services:
      img1:
         image: img1
         build:
           context: .
           args:
             - STARTDATE=${STARTDATE}
           dockerfile: DockerFileImg1
           
      img2:
         image: img2
         build:
           context: .
           args:
             - STARTDATE=${STARTDATE}
           dockerfile: DockerFileImg2
    

    更多详情请见the docker-compose documentation

    【讨论】:

    • 也许第二个选项对我有用,但通常我想要的只是保存变量而不是将其值写入两次,我不想在我的机器中设置变量,即使它可能是个好主意。
    • 如果你不想在你的机器上设置环境变量,你可以在你的项目中创建 .env 文件并使用它来代替设置环境变量。
    • 是的,当然,它在某些情况下也可能有好处,但因为它与语法和编写更简单的代码更相关,它不想在其他情况下做出真正的改变文件
    【解决方案2】:

    如果您更新到更新版本的 docker-compose,您可以通过使用 extension fields 获得通用重用:

    version: "3.8"
    
    x-args: &args
      args:
        - STARTDATE=2020-10-10 12:00:00
    
    services:
      img1:
         image: img1
         build:
           context: .
           << : *args
           dockerfile: DockerFileImg1
           
      img2:
         image: img2
         build:
           context: .
           << : *args
           dockerfile: DockerFileImg2
    

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      相关资源
      最近更新 更多