如何将容器环境变量传递给docker-compose exec命令
解决方法
你的问题根源是本地Shell会优先解析$VAR1,而这个变量只在容器A内部存在,所以直接执行docker-compose exec A command1 $VAR1会导致本地Shell把$VAR1解析为空(或本地的同名变量值)。下面是两种可行的解决方式:
让容器内的Shell处理变量解析
使用单引号包裹命令,阻止本地Shell解析变量,让容器内部的Shell去替换$VAR1:docker-compose exec A sh -c 'command1 $VAR1'如果容器默认使用Bash,也可以替换为
bash:docker-compose exec A bash -c 'command1 $VAR1'单引号会保留命令的原始格式,直到容器内的Shell执行时,才会将
$VAR1替换为容器内的VALUE1。先提取变量值再传递
先通过容器内的printenv或env命令获取VAR1的值,再将该值作为参数传给command1:# 提取容器内VAR1的值 VAR_VALUE=$(docker-compose exec A printenv VAR1) # 执行目标命令 docker-compose exec A command1 "$VAR_VALUE"这种方式适合需要在本地对变量值做额外处理(比如字符串替换、格式转换)的场景。
内容的提问来源于stack exchange,提问作者Thenavats
相关产品推荐
相关产品推荐

