搬运工,撰写不加载YAML文件
定义的附加ENV文件我都疯了我的搬运工,compose.yml内env_file设置。 当我命名文件.env
并把它放在我的项目的一切工作正常。有这个env文件的主要观点是有多个环境(开发,分期,生产),我做了我的设置。 尽快将我的文件命名为不同(例如dev.env
并将其放入env文件夹中),并尝试将其加载到我的docker-compose文件中,它将无法工作。搬运工,撰写不加载YAML文件
我举一个简单的例子来说清楚。 为了简单起见,我使用了一个变量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
- 添加
env_file: ./env/dev.env
我的搬运工,compose.yml内
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-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
变量得到加载,但不知何故没有分配。 所以我不明白。 我可能是错的,我不能在Docker-compose.yml文件中使用docker-compose的env文件。会觉得它需要首先通过docker-compose参数或其他东西加载,但在我花了这么多时间后,我想知道如果我可以加载它或不:) :)
感谢您的帮助和地狱耶开源和真棒社区。
和平出
当.env
文件存在于文件夹搬运工-撰写命令被执行时,这些环境变量被用作搬运工-撰写执行与变量置换环境变量。 (https://docs.docker.com/compose/env-file/)。
然而,当你定义env_file
选项为您服务,该服务将得到该文件作为环境变量,这些变量和那些不用于变量替换。
喜劳里,感谢您的回答。这是否意味着我只能有一个env文件来做我需要的东西,对吧?那么人们如何通过最佳实践来处理不同的环境?我可以让我的变量动态变化,并根据shell env或其他方式设置它们,但只想学习docker的方式来做正确的事情。谢谢 – bin2hex
是的,根据文档,你只能有一个env文件。 – Lauri
好的,谢谢你的帮助! – bin2hex