Docker-撰写来自环境文件的指定标签

时间:2018-08-22 12:48:01

标签: docker docker-compose

我有如下所示的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.envstage.env,其中描述了SERVICE_VERSIONPROFILE

运行docker-compose up时有什么方法可以指定具体文件 默认情况下,docker-compose从当前目录获取.env文件。

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

1 个答案:

答案 0 :(得分:1)

正如评论中答案中所提到的,由于将其直接编码到源code中以使用.env,因此无法做到这一点。

但是,有两种方法可以得到类似的行为。

第一种方法与docker-compose本机一起使用,这将使用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。这是Docker团队的新实验实用程序。

基本上,您将创建一个如下所示的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,则使用docker-app用正确的变量渲染组成文件。

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

希望这会有所帮助,当使用docker-compose处理多个环境时,我也会遇到类似的问题。