【发布时间】:2020-12-10 04:11:40
【问题描述】:
想象一下我们有这样的 .env 文件:
VAR_A=300
VAR_B=$(($VAR_A/100))
VAR_MEM=$((50*$VAR_B))M
我的 docker-compose 文件是这样使用它的:
my-service:
environment:
SOME_CACHE_VAR: ${VAR_MEM:-100M}
当我运行 docker-compose 时,它给了我一个错误:
docker.errors.DockerException: Failed converting the string value for memory ($((50*$VAR_B))) to an integer.
所以,它似乎根本不能替代变量。那我该怎么做呢?
【问题讨论】:
-
你认为
$((xxx))dollar-double-parentheses 语法在 docker-compose .env 文件中的作用是什么? (因为我很确定它不会像您想/希望的那样做。) -
(( ... ))是 bash 的东西。据我所知,不是docker environment replacement。 -
@Wyck 好吧,是的,你是对的。问题是我只是想表明我正在尝试以某种方式做到这一点并且它不起作用(因为我做错了)并且我想知道如何正确地做到这一点,如果可能的话。 $(())、${} 和 $() 都不起作用。
-
我正在尝试类似于
/bin/bash -c "SOME_CACHE_VAR=((100)) my-service"的东西,但我还没有完全掌握语法。但我正在探索的策略是用 bash 命令替换 service 命令,该命令执行替换然后运行服务。也许其他人可以在我之前弄清楚。 -
顺便说一句,
VAR_B = ${VAR_A}“工作”只要这是正确的替换语法。它只是不做算术。您只会得到 substitution、concatenation 以及${variable:-word}和${variable:+word}结构。
标签: docker docker-compose environment-variables