【发布时间】: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