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

docker-compose使用bash变量出现variable is not set错误的解决咨询

Docker Compose Command 变量解析错误的解决办法

你的问题核心是Docker Compose会自动解析YAML中的$符号,把它当成环境变量进行插值,导致脚本里的$RANDOM、$max等变量被提前解析,而非留给容器内的shell处理;另外原命令还缺少一个闭合的单引号,也会引发语法错误。以下是几种解决方法:

方法1:转义$符号

在所有需要留给shell处理的$前添加反斜杠\,阻止Docker Compose解析这些变量,同时补全闭合的单引号:

version: "3.9"
...
command: "/bin/sh -c 'max=20; min=10; trap exit TERM; while :; do echo test; sleep \$(($RANDOM%($max-$min+1)+$min)); done'"
...

方法2:使用数组形式的Command

Docker Compose对数组形式的command不会进行变量插值,数组元素会直接作为参数传递给shell,这样可以避免变量被提前解析:

version: "3.9"
...
command:
  - /bin/sh
  - -c
  - max=20; min=10; trap exit TERM; while :; do echo test; sleep $(($RANDOM%($max-$min+1)+$min)); done
...

方法3:使用外部脚本文件

把循环逻辑写入单独的shell脚本,挂载到容器中执行,这种方式更易维护,也彻底避免变量解析冲突:

  1. 创建test-loop.sh脚本:
#!/bin/sh
max=20
min=10
trap exit TERM
while :; do
  echo test
  sleep $(($RANDOM%($max-$min+1)+$min))
done
  1. 给脚本添加执行权限:
chmod +x test-loop.sh
  1. 在Docker Compose中配置挂载和执行命令:
version: "3.9"
...
services:
  tool:
    ...
    command: /app/test-loop.sh
    volumes:
      - ./test-loop.sh:/app/test-loop.sh:ro
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:22:42