如何通过Dockerfile传递参数给bash脚本



我有一个简单的Dockerfile如下:

FROM kalilinux/kali-rolling
WORKDIR /attack
COPY . /attack
RUN ls
RUN chmod +x attack.sh
RUN ./attack.sh $aws_access_key_id $aws_secret_access_key $default_region $bucket

我有这个attack.sh,它包含如下内容:

#!/bin/bash
# Getting the host passed as an argument to the script
/usr/share/zaproxy/zap.sh -cmd -addoninstall exportreport
mkdir -p /root/test
test() {
echo "access key = ${1}"
echo "secret key = ${2}"
echo "default region = ${3}"
echo "bucket = ${4}"
echo "line = ${5}"
}
while IFS= read -r line; do
# echo $line
test $1 $2 $3 $4 $line 
done < domains.txt

如果你想知道我如何将值传递给Dockerfile,它是这样的:

docker build --build-arg aws_access_key_id=${SPOT_RUNNER_ACCESS_KEY} --build-arg aws_secret_access_key=${SPOT_RUNNER_SECRET_KEY} --build-arg default_region=ap-southeast-2 --build-arg bucket=${BUCKET_NAME} -t run-test .

所以参数是按以下顺序传递的

docker build ---> Dockerfile ---> attack.sh

但是,这不起作用,它为这些变量提供了一个空值。

有人能帮帮我吗?

要让Docker使用你的构建参数,你需要在Dockerfile中以ARG的形式指定它们的名称。一旦这样做了,这些变量就可以作为参数使用了。

FROM kalilinux/kali-rolling
# Add build args
ARG aws_access_key_id
ARG aws_secret_access_key
ARG default_region
ARG bucket

WORKDIR /attack
COPY . /attack
RUN ls
RUN chmod +x attack.sh
RUN ./attack.sh $aws_access_key_id $aws_secret_access_key $default_region $bucket

我不确定这会做你想做的事情,因为脚本将在构建时运行。但是,它会将您的参数从docker构建命令传递给attack.sh的参数。

最新更新