我对docker-compose.yml中的env_file设置感到很疯狂。
当我将文件命名为.env
并将其放在项目的根目录中时,一切正常。拥有这个env文件的要点是拥有多个环境(dev,staging,production),我进行了设置。
一旦我将我的文件命名为不同(例如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_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: {}
说什么? hack是我的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>
和平
答案 0 :(得分:2)
当执行文件夹docker-compose命令时出现.env
文件时,这些环境变量将用作docker-compose执行和变量替换的环境变量。 (https://docs.docker.com/compose/env-file/)。
但是,当您为服务定义env_file
选项时,该服务将从文件中获取这些变量作为环境变量,而不是用于变量替换。