子环境变量无法正确设置,为什么?

雷尼埃

我有一个“主要” Docker项目,该项目通过主要docker-compose.yml.env文件触发了一些子项目请参阅以下目录结构,以便您有一个更好的主意:

`-- project/
    `-- docker-compose.yml/
        |-- .env
        |-- project-1/
        |   |-- docker-compose.yml
        |   `-- .env
        `-- project-2/
            |-- docker-compose.yml
            `-- .env

.env文件(/project/.env)如下所示:

COMPOSE_CONVERT_WINDOWS_PATHS=1
COMPOSE_PATH_SEPARATOR=|
COMPOSE_FILE=docker-compose.local.yml|project-1/docker-compose.yml|project-2/docker-compose.yml

这告诉码头工人也运行这些孩子project-1, project-2通过它docker-compose.yml,它是.env文件。

我希望每个项目都有一个自定义配置,因此我在子项目(/project-1/docker-compose.yml, /project-2/docker-compose.yml)中添加了以下配置

version: "2.4"
services:
  main-project-1:
    environment:
      - XDEBUG_MODE=${XDEBUG_MODE:-off}

如果我没有记错,则意味着:如果XDEBUG_MODE未定义变量,则默认off使用其他在.env文件中定义的值然后,我将.env文件配置如下:

// project-2/.env
XDEBUG_MODE=on

由于某种原因,即使我文件中将环境变量XDEBUG_MODE设置为环境变量,它也被设置为offdebug.env

我也尝试了以下方法:

version: "2.4"
services:
  main-project-1:
    environment:
      - XDEBUG_MODE=${XDEBUG_MODE}

但再次将其设置为off

我不想在主.env文件中定义变量,因为我想让每个项目都可以打开/关闭它。我在这里可能会想念什么?

在互联网上的其他文章中已读到这里,但找不到解决我问题的方法。

在线

您误解了如何docker-compose查找.env,请参阅以下内容

Compose支持在名为.env的环境文件中声明默认环境变量,该文件位于执行docker-compose命令的文件夹(当前工作目录)中。

这意味着它会尝试.env在您运行docker-compose命令的文件夹中找到,而不是在您存储的文件夹中找到docker-compose.yaml

接下来证明一下:

docker-compose.yaml:

version: '3'
services:
  app1:
    image: ubuntu:16.04
    environment:
      - XDEBUG_MODE=${XDEBUG_MODE:-off}

.env:

XDEBUG_MODE=on
  • 如果您docker-compose config在当前文件夹中运行,它将显示:

    services:
      app1:
        environment:
          XDEBUG_MODE: "on"
        image: ubuntu:16.04
    version: '3.0'
    
  • 如果docker-compose -f 20210108/docker-compose.yaml config在其父文件夹中运行(假设其父文件夹为20200108),则它将显示:

    services:
      app1:
        environment:
          XDEBUG_MODE: "off"
        image: ubuntu:16.04
    version: '3.0'
    

最后,针对您的情况,下一步是正确的方法:

docker-compose.yaml:

version: '3'
services:
  app1:
    image: ubuntu:16.04
    tty: true
    stdin_open: true
    command: ["env"]
    environment:
      - XDEBUG_MODE=${XDEBUG_MODE:-off}

.env:

COMPOSE_PATH_SEPARATOR=|
COMPOSE_FILE=docker-compose.yaml|project1/docker-compose.yaml

project1 / docker-compose.yaml:

version: '3'
services:
  app2:
    image: ubuntu:16.04
    tty: true
    stdin_open: true
    command: ["env"]
    env_file: project1/.env

project1 / .env

XDEBUG_MODE=on

输出:

$ docker-compose config
services:
  app1:
    command:
    - env
    environment:
      XDEBUG_MODE: "off"
    image: ubuntu:16.04
    stdin_open: true
    tty: true
  app2:
    command:
    - env
    environment:
      XDEBUG_MODE: "on"
    image: ubuntu:16.04
    stdin_open: true
    tty: true
version: '3.0'

注意:对于project1/docker-compose.yaml,您应该接下来删除,in中的变量env_file将直接由容器使用,并且如果在中定义相同的变量,则不会展开environment实际上,它不是要重新定义的路径.env,而只是env_file要在.env以下位置重用变量

environment:
  - XDEBUG_MODE=${XDEBUG_MODE:-off}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法正确设置环境变量

来自分类Dev

在 Java 中访问子环境变量

来自分类Dev

为什么在初始化代码之前无法正确加载我的环境变量?

来自分类Dev

Visual Studio脚本无法正确设置环境变量

来自分类Dev

为什么未设置此环境变量?

来自分类Dev

为什么bash $()可以设置环境变量?

来自分类Dev

为什么部分设置了我的环境变量?

来自分类Dev

Docker为什么未设置$ USER环境变量

来自分类Dev

无法设置环境变量-发生了什么事?

来自分类Dev

如何正确设置环境变量

来自分类Dev

如何正确设置环境变量?

来自分类Dev

如何正确设置KDE的环境变量?

来自分类Dev

无法在jenkinsfile中设置环境变量

来自分类Dev

无法在命令前设置环境变量

来自分类Dev

无法在〜/ .profile中设置环境变量

来自分类Dev

无法在 Apache 中设置环境变量

来自分类Dev

无法取消设置Linux环境变量

来自分类Dev

Scala:无法设置环境变量

来自分类Dev

无法从另一个环境变量正确设置zsh PATH变量

来自分类Dev

是什么设置$ SHELL环境变量?

来自分类Dev

为什么环境变量不改变?

来自分类Dev

为什么不能将变量用作设置环境变量的命令的前缀?

来自分类Dev

在Netlify函数中设置环境变量的正确方法是什么?

来自分类Dev

在dataproc群集节点上设置环境变量的正确方法是什么?

来自分类Python

在python中取消设置Linux环境变量的正确方法是什么?

来自分类Dev

在PowerShell脚本中设置用户环境变量的正确方法是什么?

来自分类Dev

设置环境变量

来自分类Dev

为什么即使正确设置变量也无法识别变量

来自分类Dev

为什么我的环境变量没有在 ConfigMap 的 Kubernetes Pod 中设置?

Related 相关文章

热门标签

归档