【问题标题】:docker-compose interpolate environment variables: use default variables provided by docker-composedocker-compose interpolate 环境变量:使用 docker-compose 提供的默认变量
【发布时间】:2021-09-02 23:49:07
【问题描述】:

我需要以下模板方面的帮助:

services:

nginx:
  image: nginx
  restart: unless-stopped
  labels:
    - "traefik.enable=true"
    - "traefik.http.routers.nginx-${COMPOSE_PROJECT_NAME}.rule=Host(`fuu.bar`)"
  networks:
    - treafik

我的目标是创建一个我可以使用的模板。 G。在几乎零配置的搬运工中。

我认为 following variables 在 docker-compose 配置中可用,但表达式 ${COMPOSE_PROJECT_NAME} 导致一个空字符串:docker-compose config

services:

nginx:
  image: nginx
  restart: unless-stopped
  labels:
    - "traefik.enable=true"
    - "traefik.http.routers.nginx-.rule=Host(`fuu.bar`)"
  networks:
    - treafik

是否有 docker-compose 提供的默认环境变量可用于环境插值?

----更新

我使用 traefik (v2) 作为反向代理。要通过 treafik 使容器可用,您需要在每个服务上定义路由器。路由器名称必须是唯一的。假设您部署了 2 个或更多堆栈上述模板。对于所有堆栈中的所有服务,路由器名称必须是唯一的。因为我是个懒人,所以我尝试简单地集成环境变量COMPOSE_PROJECT_NAME(我知道它在我的设置中已经是唯一的,因为每个堆栈都必须有一个唯一的名称)。但是在部署堆栈时该变量不可用。 当然,我可以简单地在.env文件中自己定义变量COMPOSE_PROJECT_NAME,但我希望docker提供任何默认的环境变量。

【问题讨论】:

    标签: docker docker-compose environment-variables interpolation substitution


    【解决方案1】:

    您可以使用环境变量将字符串传递给您的 docker 文件。 通过docker documentation有很多方法。例如:

    您可以在名为 .env 的环境文件中为 Compose 文件中引用或用于配置 Compose 的任何环境变量设置默认值。 .env文件路径如下:

    • 从 +v1.28 开始,.env 文件被放置在项目的基础上 目录
    • 项目目录可以使用 --file 选项显式定义或 COMPOSE_FILE 环境变量。否则就是当前的 执行 docker compose 命令的工作目录 (+1.28)。
    • 对于以前的版本,它可能无法解析 .env 文件 --file 或 COMPOSE_FILE。要解决此问题,建议使用 --project-directory,它会覆盖 .env 文件的路径。 +v1.28 通过将文件路径限制为 项目目录。

    【讨论】:

    • 抱歉,我的描述不够清楚。我知道 .env 文件机制。
    • 您测试了 docker 文档中的所有解决方案,但没有奏效?甚至--env-file 选项?
    • 抱歉,进入快键。我更新了上面的描述,以(希望)更清楚地说明我想要达到的目标。是的,我测试了多个环境变量,如COMPOSE_PROJECT_NAMECOMPOSE_FILE 等。但我认为唯一的用途是配置 docker-compose 行为,默认情况下它们不能用于环境插值(除了我自己定义它们)跨度>
    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2022-01-01
    • 2018-02-03
    • 2019-02-25
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多