docker-compose 在使用 `COMPOSE_FILE` 时忽略 .env 文件
docker-compose ignores .env file when using `COMPOSE_FILE`
我将所有 docker 内容保存在项目根目录下的 docker/
子目录中,包括 docker-compose.yml
和 .env
.
当我运行:
$ docker-compose -f /path/to/my-project/docker/docker-compose.yml up -d
一切正常。但是,我想避免每次都必须指定 -f
,所以我设置了 COMPOSE_FILE
变量:
$ export COMPOSE_FILE="/path/to/my-project/docker/docker-compose.yml"
$ docker-compose up -d
WARN[0000] The "DJANGO_DB_USER" variable is not set. Defaulting to a blank string.
WARN[0000] The "DJANGO_DB_NAME" variable is not set. Defaulting to a blank string.
WARN[0000] The "DJANGO_DB_PASSWORD" variable is not set. Defaulting to a blank string.
WARN[0000] The "DJANGO_DB_PASSWORD" variable is not set. Defaulting to a blank string.
...
不幸的是,与通过命令行指定相反,使用 COMPOSE_FILE
时不再使用 docker/.env
文件。
处理此问题的最佳做法是什么?我的主要目标是不必每次都输入很长的命令 运行 撰写命令。
我正在使用 docker-compose
版本 2.2.3
如果您使用 -f
标志指向撰写文件,.env
需要在撰写文件 旁边 。但是,如果您使用变量 COMPOSE_FILE
,则 .env
需要位于 PWD
,因此 在调用 compose CLI 的地方.
这就是为什么我倾向于将我的 .env 文件放在我的项目的根目录下并这样添加变量:
COMPOSE_PROJECT_NAME=my-project
COMPOSE_FILE=.docker/compose.yaml
项目名称变量很有用,因此 compose 不会仅命名项目 docker
。如果在几个不同的项目中有此模式,则在不设置项目名称时最终会发生名称冲突。
这让我可以将所有 docker 相关的内容隐藏在它自己的目录中,并且仍然能够只做 docker compose up
.
唯一的问题是你需要这个 env 文件或其他机制,如 direnv/.envrc 来让 compose 知道你想做什么。
我将所有 docker 内容保存在项目根目录下的 docker/
子目录中,包括 docker-compose.yml
和 .env
.
当我运行:
$ docker-compose -f /path/to/my-project/docker/docker-compose.yml up -d
一切正常。但是,我想避免每次都必须指定 -f
,所以我设置了 COMPOSE_FILE
变量:
$ export COMPOSE_FILE="/path/to/my-project/docker/docker-compose.yml"
$ docker-compose up -d
WARN[0000] The "DJANGO_DB_USER" variable is not set. Defaulting to a blank string.
WARN[0000] The "DJANGO_DB_NAME" variable is not set. Defaulting to a blank string.
WARN[0000] The "DJANGO_DB_PASSWORD" variable is not set. Defaulting to a blank string.
WARN[0000] The "DJANGO_DB_PASSWORD" variable is not set. Defaulting to a blank string.
...
不幸的是,与通过命令行指定相反,使用 COMPOSE_FILE
时不再使用 docker/.env
文件。
处理此问题的最佳做法是什么?我的主要目标是不必每次都输入很长的命令 运行 撰写命令。
我正在使用 docker-compose
版本 2.2.3
如果您使用 -f
标志指向撰写文件,.env
需要在撰写文件 旁边 。但是,如果您使用变量 COMPOSE_FILE
,则 .env
需要位于 PWD
,因此 在调用 compose CLI 的地方.
这就是为什么我倾向于将我的 .env 文件放在我的项目的根目录下并这样添加变量:
COMPOSE_PROJECT_NAME=my-project
COMPOSE_FILE=.docker/compose.yaml
项目名称变量很有用,因此 compose 不会仅命名项目 docker
。如果在几个不同的项目中有此模式,则在不设置项目名称时最终会发生名称冲突。
这让我可以将所有 docker 相关的内容隐藏在它自己的目录中,并且仍然能够只做 docker compose up
.
唯一的问题是你需要这个 env 文件或其他机制,如 direnv/.envrc 来让 compose 知道你想做什么。