【问题标题】:How to use environment variables with docker-compose from other directory如何使用来自其他目录的 docker-compose 环境变量
【发布时间】: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。

如何解决这个问题?

【问题讨论】:

    标签: docker docker-compose environment-variables


    【解决方案1】:

    很抱歉,但这无法解决。提供的.env文件必须在同一目录下。

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

    【讨论】:

    【解决方案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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-21
        • 2019-01-07
        • 2015-06-17
        • 2022-11-08
        • 2019-07-26
        • 2021-09-02
        • 2017-06-18
        • 1970-01-01
        相关资源
        最近更新 更多