Docker-compose 从 env 文件指定标签

标签 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 文件。

有没有办法覆盖它或其他解决方法?

最佳答案

正如评论中的答案中提到的,没有办法做到这一点,因为它直接编码到源代码 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 使用正确的变量渲染 compose 文件。

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

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

关于Docker-compose 从 env 文件指定标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51967256/

相关文章:

docker - karma phantomjs 未在 docker 容器中捕获

docker - `docker-compose` 命令 `down` 、 `kill` 和 `stop` 之间有什么区别?

docker - 如何使用 Docker Compose 使用另一个容器中的命令?

selenium - Codeception Web 驱动程序(Docker 上的 Selenium)测试无法正常工作,因为无法看到其他容器(但在我的开发机器上工作?!)

docker - 了解在Docker中传递给-v的参数

c - 无法在 docker 镜像上执行 arm-cc ( ubuntu 12.04 base )

docker - Concourse 将文件添加到 docker 镜像一次

mongodb - 带有 docker-compose 的 AdminMongo 不起作用

node.js - 如何从 Nodejs 应用程序容器使用 mongodump 命令?

docker - docker-compose无法理解我的env_file