如何在Bash脚本的Docker命令中传递并使用脚本参数?
解决Docker exec命令中Bash变量无法传递到容器内的问题
问题出在你用了单引号包裹bash -c的命令内容——Bash里单引号会完全保留字符串的字面意义,不会解析外部脚本中的$location和$index变量,容器内的bash会尝试读取自身环境里的同名变量,而这些变量根本不存在,所以导致参数传递失败。
下面是两种可行的解决方法:
方法1:改用双引号包裹命令内容
把bash -c后的单引号换成双引号,这样外部脚本的变量会被先解析,再传递给容器内的bash执行:
docker exec myDockerContainer_1 bash -c "myMigrationScript --pw=$location --pwOld=1234 --indexToStartAt=$index"
这种方式适合变量内容不含特殊字符(比如空格、引号)的场景,你的参数是数字和普通字符串,完全适用。
方法2:通过位置参数安全传递变量(推荐)
如果变量可能包含特殊字符,或者想避免意外的变量解析问题,推荐用bash -c的位置参数传递方式:
index=$1 location=$2 docker exec myDockerContainer_1 bash -c 'myMigrationScript --pw="$1" --pwOld=1234 --indexToStartAt="$2"' _ "$location" "$index"
这里的_是占位符(对应容器内bash的$0),后面的"$location"和"$index"会作为容器内bash的$1和$2被读取,容器内的命令用"$1"、"$2"引用这些参数,能确保变量内容被正确传递,不会被意外解析。
内容的提问来源于stack exchange,提问作者MeditationOrBust
相关产品推荐
相关产品推荐

