问题描述
有
我需要将多个参数传递给docker
命令,但是我希望此参数字符串是交互式构建的,而不是手工构建的。在我的特定问题中,我想获取本机中的所有环境变量并将每个环境变量设置为build-arg
参数。
例如,如果env变量是
ENV_VAR1=ENV_VALUE1
ENV_VAR2=ENV_VALUE2
ENV_VAR3=ENV_VALUE3
我想构建一个像这样的字符串
docker build --build-arg ENV_VAR1=ENV_VALUE1 --build-arg ENV_VAR2=ENV_VALUE2 --build-arg ENV_VAR1=ENV_VALUE1 .`
我想知道如何将这种重复包装在bash脚本中,如下所示(请问这只是一个伪代码):
docker build $(FOREACH get_output_of_env() AS $env DO `--build-arg $env` END) .
那有可能吗?
预先感谢
解决方法
使用数组:
dockerargs=()
for i in ENV_VAR1 ENV_VAR2 ENV_VAR3; do
dockerargs+=(--build-arg "$i=${!i}")
done
docker build "${dockerargs[@]}" ...
如果您真的想使用how to iterate over env并执行for i in $(compgen -e)
#!/bin/sh
cat > args < EOF
#!/bin/sh
EOF
env -0 >> args
sed -i s'@^@--build-arg @g' args
tr '\n' ' '
sed -i s'@^@docker build@' args
然后只需将“ args”作为另一个外壳脚本执行即可。我承认我还没有测试过,但是我看不出太多原因导致它不起作用。