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

能否将操作系统变量或Shell命令结果传入docker-compose?

在docker-compose.yml中传入Shell命令/系统变量结果作为环境变量的可行性

完全可行,但你当前的语法有误,以下是几种符合你需求的实现方式(均无需镜像构建阶段传参或容器内执行命令):

方式1:启动前通过Shell赋值环境变量再启动

先在Shell中将命令结果赋值给环境变量,再让docker-compose读取该变量:

  1. 在Shell中执行:
export WORKSPACE=$(hostname) && docker-compose up -d
  1. 对应的docker-compose.yml配置:
version: '3.8'
services:
  service:
    image: docker-container:latest
    environment:
      - WORKSPACE=${WORKSPACE}

方式2:用envsubst实时替换yml中的Shell命令

利用Shell的envsubst工具,先替换yml中的命令占位符,再传递给docker-compose执行:

  1. 调整docker-compose.yml配置:
version: '3.8'
services:
  service:
    image: docker-container:latest
    environment:
      - WORKSPACE=$(hostname)
  1. 执行启动命令:
envsubst < docker-compose.yml | docker-compose -f - up -d

方式3:通过.env文件传递(需预先生成)

先将命令结果写入.env文件,docker-compose会自动加载该文件中的环境变量:

  1. 在Shell中生成.env文件:
echo "WORKSPACE=$(hostname)" > .env
  1. 对应的docker-compose.yml配置:
version: '3.8'
services:
  service:
    image: docker-container:latest
    environment:
      - WORKSPACE=${WORKSPACE}

注意事项

  • 你示例中的${{hostname}}语法是错误的,docker-compose仅支持单大括号${变量名}的环境变量引用方式。
  • 以上所有方式均在容器启动前完成变量赋值,容器启动后直接获取到结果,完全符合你“不在容器内执行命令”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:52:38