【问题标题】:docker-compose don't load additional env-file defined in yaml filedocker-compose 不加载 yaml 文件中定义的附加环境文件
【发布时间】:2016-12-14 12:26:05
【问题描述】:

我对 docker-compose.yml 中的 env_file 设置感到疯狂。 当我将文件命名为 .env 并将其放在我的项目的根目录中时,一切正常。拥有这个 env 文件的主要目的是在我进行设置的地方拥有多个环境(开发、登台、生产)。 一旦我将我的文件命名为不同的名称(例如dev.env 并将其放入 env 文件夹中)并尝试将其加载到我的 docker-compose 文件中,它将无法正常工作。

我做了一个简单的例子来说明问题。 为简单起见,我使用一个变量 DC_DOCKERFILE 来定义要加载的 dockerfile。

文件:.env 在根文件夹中:

COMPOSE_PROJECT_NAME=test
DC_DOCKERFILE=./Dockerfile.bash.dev

文件:docker-compose.yml

version: "2"

services:
  bash:
    build:
      context: .
      dockerfile: ${DC_DOCKERFILE}

docker-compose config 表明一切都很酷,并且构建也能正常工作:

networks: {}
services:
  bash:
    build:
      context: /devops/myproject
      dockerfile: ./Dockerfile.bash.dev
version: '2.0'
volumes: {}

现在让我大吃一惊:

  • 在项目根目录下创建文件夹 env
  • 将 .env 移动到 ./env/dev.env
  • 在我的 docker-compose.yml 中添加 env_file: ./env/dev.env

env 内容看起来和上面一样,所以我不再发布内容了。

我的新docker-compose.yml

version: "2"

services:

  bash:
    env_file: ./env/dev.env
    build:
      context: .
      dockerfile: ${DC_DOCKERFILE}

仅更改,添加 env_file 设置。

现在我 docker-compose config 给了我这个:

networks: {}
services:
  bash:
    build:
      context: /devops/myproject
      dockerfile: ''
    environment:
      COMPOSE_PROJECT_NAME: test
      DC_DOCKERFILE: ./Dockerfile.bash.dev
version: '2.0'
volumes: {}

说什么?我的 dockerfile 设置在哪里?

当然docker-compose build 也不喜欢这样,并且很烦:

docker-compose build --force-rm --no-cache                                                                                 
WARNING: The DC_DOCKERFILE variable is not set. Defaulting to a blank string.
Building bash
ERROR: Cannot locate specified Dockerfile: Dockerfile

变量被加载但不知何故未分配。 所以我不明白。 我可能错了,我不能将 env 文件用于 docker-compose.yml 文件中的 docker-compose 内容。会让人觉得它需要首先通过 docker-compose 参数或其他东西以某种方式加载,但是在我花了这么多时间之后,我想知道我是否可以在里面加载它:)

感谢您的帮助,感谢开源和令人敬畏的社区。​​p>

和平相处

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    .env file 存在于执行docker-compose 命令的文件夹中时,这些环境变量将用作docker-compose 执行和变量替换的环境变量。 (https://docs.docker.com/compose/env-file/)。

    但是,当您为服务定义 env_file 选项时,服务将从文件中获取这些变量作为环境变量,而这些变量不用于变量替换。

    【讨论】:

    • 嗨劳里,感谢您的回答。这是否意味着我只能有一个 env 文件来做我需要的事情,对吗?那么人们如何使用最佳实践来处理不同的环境呢?我可以使我的变量动态化并根据 shell env 或其他设置它们,但只想学习 docker 正确做事的方式。谢谢
    • 是的,根据文档,您只能拥有一个 env 文件。
    猜你喜欢
    • 1970-01-01
    • 2022-10-15
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2019-09-05
    相关资源
    最近更新 更多