docker-compose不加载在yaml文件中定义的其他env文件

在我的docker-compose.yml里面,env_file设置变得疯狂了。 当我命名文件.env并把它放在我的项目的一切工作正常。 有这个env文件的主要观点是有多个环境(开发,分期,生产),我做了我的设置。 尽快我命名我的文件不同(例如dev.env并把它放在一个env文件夹),并尝试加载它在我的docker组成文件,它将无法正常工作。

我举一个简单的例子来说清楚。 为了简单起见,我使用了一个variablesDC_DOCKERFILE,其中我定义了要加载的dockerfile。

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

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

file: docker-compose.yml

 version: "2" services: bash: build: context: . dockerfile: ${DC_DOCKERFILE} 

docker-compose config显示一切都很酷,并且构build工作也是如此:

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

现在让我感到困惑的一点是:

  • 在项目的根目录下创build一个文件夹env
  • 将.env移动到./env/dev.env
  • 在我的docker-compose.yml里添加env_file: ./env/dev.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: {} 

说什么? 哪里是我的docker文件设置?

当然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 

variables得到加载,但不知何故未分配。 所以我不明白。 我可能是错的,我不能使用docker-compose.yml文件中的docker-compose东西的env文件。 会觉得它需要首先通过docker-compose参数或其他东西加载,但之后,我花了这么多时间,我想知道如果我可以加载它或不:)

感谢您的帮助和地狱是开源和真棒社区。

和平了

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

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