繁体   English   中英

如何在其他目录中通过 docker-compose 使用环境变量

[英]How to use environment variables with docker-compose from other directory

我正在设置一个新的基于 docker 的服务器,我正在编写一个脚本来运行

$ docker-compose

一次为我所有docker-compose.yml文件。

我知道.env文件的存在,我知道env_file docker-compose.yml env_file选项,但是.env文件在我启动时被忽略

$ docker-compose up

从其他目录甚至env_file完整路径都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。

如何解决这个问题?

很抱歉,但这无法修复。 提供的.env文件必须在同一目录中。

这是 docker compose 的要求,在文档(第一段)中有描述: https : //docs.docker.com/compose/env-file/

你可以推出自己的:

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
}

您可以使用标志 --env-file 来设置 .env 文件所在的路径,例如:

docker-compose --env-file ./config/.env.dev up

https://docs.docker.com/compose/environment-variables/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM