Bash 通过文件将多个构建参数传递给docker

Bash 通过文件将多个构建参数传递给docker,bash,docker,Bash,Docker,我希望能够将多个构建参数传递到docker文件,并通过文件执行此操作。 我找到了解决办法 我的build.args文件: SSH_PRIVATE_KEY="$(< ~/.ssh/mia_key)" CORE_CONFIG_NAME=staging.yml 我得到了 unknown flag: --build-arg SSH_PRIVATE_KEY See 'docker build --help'. 当 echo $(for i in `cat build.args`; do out

我希望能够将多个构建参数传递到docker文件,并通过文件执行此操作。
我找到了解决办法

我的
build.args
文件:

SSH_PRIVATE_KEY="$(< ~/.ssh/mia_key)"
CORE_CONFIG_NAME=staging.yml
我得到了

unknown flag: --build-arg SSH_PRIVATE_KEY
See 'docker build --help'.

echo $(for i in `cat build.args`; do out+="--build-arg $i " ; done; echo $out;out="";IFS=$old_IFS)
给了我所期望的

--build-arg SSH_PRIVATE_KEY="$(< ~/.ssh/mia_key)" --build-arg CORE_CONFIG_NAME=staging.yml
--build arg SSH\u PRIVATE\u KEY=“$(<~/.SSH/mia\u KEY)”--build arg CORE\u CONFIG\u NAME=staging.yml
我相信这可能与引用有关,就像我所说的

docker build --squash -t automations \
      "--build-arg SSH_PRIVATE_KEY="$(< ~/.ssh/mia_key)" --build-arg CORE_CONFIG_NAME=staging.yml" .
docker构建——挤压-t自动化\
“--build arg SSH\u PRIVATE\u KEY=“$(<~/.SSH/mia\u KEY)”--build arg CORE\u CONFIG\u NAME=staging.yml”。
如何解决此问题?

我必须去掉引号,或者找到另一种传递参数的解决方案

不要使用反勾号`。改用
$(…)

不要
以美元为单位的i(cat)
。当IFS=read-r循环时使用

使用bash数组正确引用参数

args=()
while IFS= read -r i; do args+=("--build-arg" "$i"); done < build.args
docker build --squash -t automations "${args[@]}" .

如果要执行
$(请不要使用反勾号)。请改用
$(…)

不要对$(cat)中的i使用
。在IFS=read-r
循环时使用

使用bash数组正确引用参数

args=()
while IFS= read -r i; do args+=("--build-arg" "$i"); done < build.args
docker build --squash -t automations "${args[@]}" .

如果您想执行
$(您想按字面意思传递字符串
SSH_PRIVATE_KEY=“$(<~/.SSH/mia_KEY)”
,或者您想执行
$(<…)
并传递结果内容?您想按字面意思传递字符串
SSH_PRIVATE_KEY=“$(<~/.SSH/mia_KEY)”
,或者您想执行
$(<…)
并传递结果内容?
docker build --squash -t automations $(while IFS= read -r i; do printf "%q %q " --build-arg "$i"; done < build.args) .
docker build --squash -t automations $(
    source build.args;
    for i in CORE_CONFIG_NAME SSH_PRIVATE_KEY; do
         printf "%q %q=%q " --build-arg "$i" "${!i}";
    done
) .