解决从配置文件读取Docker Build参数的引号异常问题
解决Docker Build参数被错误包裹的问题
问题根源在于你错误地将--build-arg和它的参数合并成了带转义引号的字符串,并且错误使用了转义字符,导致bash将引号作为参数的一部分传递给docker命令。
正确的实现方式
主脚本
保持数组初始化,加载用户配置:
BUILD_ARGS=() source ./userconfig.sh docker build "${BUILD_ARGS[@]}" ...
用户配置文件 userconfig.sh
利用bash数组的元素拆分特性,将每个--build-arg选项和对应的参数分别作为数组元素:
USERID=$(id -u) # 逐个添加参数,每个--build-arg和对应值分开成数组元素 BUILD_ARGS+=( --build-arg "USERID=$USERID" ) BUILD_ARGS+=( --build-arg "SECONDARG=somethingelse" ) # 或者一次性赋值 # BUILD_ARGS=( --build-arg "USERID=$USERID" --build-arg "SECONDARG=somethingelse" )
为什么这样有效
- bash数组的每个元素会被当作独立的命令行参数,
"${BUILD_ARGS[@]}"展开时,会将每个数组元素原样传递给docker build,不会添加额外的引号。 --build-arg是独立的命令行选项,需要搭配单独的参数(比如USERID=1000),拆分后docker能正确识别选项和对应的参数值。- 不需要使用转义引号
\",数组赋值时的双引号只是确保包含变量的字符串被当作一个整体(即使值里有空格也能正确处理),不会被传递到最终命令中。
你之前写法的错误点
--build-arg=\"USERID=$USERID\"这种写法会把--build-arg="USERID=1000"作为一个完整参数传递,导致docker识别错误的选项。- 转义引号
\"会被保留在参数中,最终docker收到的是带引号的参数值,不符合预期。
内容的提问来源于stack exchange,提问作者Sway
相关产品推荐
相关产品推荐

