代码之家  ›  专栏  ›  技术社区  ›  Aliaksei Stadnik

Docker compose从env文件中指定标记

  •  1
  • Aliaksei Stadnik  · 技术社区  · 6 年前

    我有docker-compose.yml,如下所示:

    version: '2'
    services:
    
        micro-service:
            image: some/micro-service:${SERVICE_VERSION}
            env_file:
                - ../all-variables/${PROFILE}/micro_service.env
            ports:
                - "8085:8085"
    

    dev.env stage.env 哪里 SERVICE_VERSION PROFILE 描述。

    docker-compose up 默认情况下,docker compose takes .env

    是否有方法覆盖它或其他解决方法?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jack Gore    6 年前

    正如注释中的答案所提到的,没有办法这样做,因为它直接被编码到源代码中 code 使用 .env .

    第一种方法与 docker-compose override 文件夹。

    所以在你的情况下你可以有你的基地 docker-compose.yml 像这样的文件:

    version: '2'
    services:
      micro-service:
        image: some/micro-service:1.0.0
        ports:
          - "8085:8085"
    

    然后你可以定义 docker-compose-dev.yml 文件:

    version: '2'
    services:
      micro-service:
        image: some/micro-service:dev
        env_file:
          - ../all-variables/dev/micro_service.env
    

    $ docker-compose up -f docker-compose.yml -f docker-compose-dev.yml up

    如果这样做,则 docker-compose-dev.yml文件 将重写中的 docker-compose.yml文件 . 所以不用图像 some/micro-service:1.0.0 docker-compose-dev.yml文件 .

    第二种方法是 docker-app

    基本上你会创造一个 dockerapp

    version: 0.0.1
    name: app
    
    ---
    version: '2'
    services: 
      micro-service:
        image: some/micro-service:${SERVICE_VERSION}
          env_file:
            - ../all-variables/${PROFILE}/micro_service.env
          ports:
            - "8085:8085"
    ---
    SERVICE_VERSION: latest
    PROFILE: default
    

    如果你把你的 .env环境 .yml 使用正确的变量呈现compose文件 docker-app .

    docker-app render -f dev.yml | docker-compose -f - up