如何使用来自其他目录的 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 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

包括来自父目录或其他目录的文件

Makefile 包含来自其他目录的头文件

ubuntu18.04在线安装dockernvidia-docker2与docker-compos

如何与 ECS 上的其他容器共享文件或目录?

如何使用来自其他文件的反应组件

如何使用来自其他活动android的片段打开一个活动