如何使用来自其他目录的 docker-compose 环境变量
Posted
技术标签:
【中文标题】如何使用来自其他目录的 docker-compose 环境变量【英文标题】:How to use environment variables with docker-compose from other directory 【发布时间】:2019-10-06 22:33:03 【问题描述】:我正在设置一个新的基于 docker 的服务器,我正在编写一个脚本来运行
$ docker-compose
一次用于我所有的docker-compose.yml
文件。
我知道.env
文件的存在,并且我知道docker-compose.yml
中的env_file
选项,但是当我启动时.env
文件被忽略
$ docker-compose up
从其他目录,甚至env_file
中的完整路径都没有帮助。
my_script.sh:
#!/bin/bash
docker-compose up -f /server1/docker-compose.yml -f /server2/docker-compose.yml -f /server3/docker-compose.yml
Docker-compose.yml:
version: '3'
services:
service_name:
build: /server1/apache
env_file: /server1/.env
volumes:
- /web/$ROOT_DOMAIN/web/:/var/www/:rw
.env
ROOT_DOMAIN=server1.domain.tld
我想将卷中的$ROOT_DOMAIN
变量替换为.env
文件中定义的变量。当我跑步时,这就像一个魅力
$ docker-compose up
来自/server1/
文件夹。但是,当我运行位于其他目录中的脚本时,环境变量将被忽略并默认为 null。
如何解决这个问题?
【问题讨论】:
【参考方案1】:很抱歉,但这无法解决。提供的.env
文件必须在同一目录下。
这是 docker compose 的要求,在文档(第一段)中有描述:https://docs.docker.com/compose/env-file/
【讨论】:
符号链接怎么样? 可以设置标志 --env-file 例如:docker-compose --env-file ./config/.env.dev up。更多细节在这里docs.docker.com/compose/environment-variables【参考方案2】:您可以自己滚动:
function execute()
(set -a; source .env; cat $1 | envsubst | kubectl apply -f -)
execute foo.yaml
和
$ cat .env
FOO=123
BAR=abc
$ cat foo.yaml
"myfoo": $FOO,
"mybar": $BAR
【讨论】:
【参考方案3】:你可以使用标志--env-file来设置.env文件所在的路径,例如:
docker-compose --env-file ./config/.env.dev up
Docker 官方文档: https://docs.docker.com/compose/environment-variables/
【讨论】:
以上是关于如何使用来自其他目录的 docker-compose 环境变量的主要内容,如果未能解决你的问题,请参考以下文章