You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose Up与Docker Stack Deploy的.env文件插值行为差异及适配咨询

问题描述

我有一个.env文件,内容为:
VAR_NAME=test$TEST

  • 执行docker compose up后,在容器中运行echo $VAR_NAME,输出结果为:test;
  • 使用同一个.env文件执行docker stack deploy时,得到预期输出:test$TEST。

我知道可以通过转义或引号处理,但这会导致docker stack deploy执行失败,因为它默认会进行插值处理。请问是否可以在不修改变量本身的前提下,让docker compose up的表现与docker stack deploy一致?

解决方法

不需要修改.env文件内容,有两种方式可以实现:

方法一:临时禁用Compose的变量插值

执行docker compose up时,通过环境变量禁用变量插值:

COMPOSE_INTERPOLATE_ENVIRONMENT_VARIABLES=0 docker compose up

该环境变量会让Compose直接读取.env文件的原始内容,不进行变量替换,与docker stack deploy的处理逻辑保持一致。

方法二:在docker-compose.yml中配置env_file的插值选项

在docker-compose.yml里为指定的.env文件添加interpolate: false配置,明确要求不进行变量插值:

services:
  # 替换为你的实际服务名称
  your-service:
    env_file:
      - path: .env
        interpolate: false

配置后Compose启动时会直接加载.env的原始内容,不会解析其中的$TEST变量。

内容的提问来源于stack exchange,提问作者alserious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:55:58