1

I have a simple Dockerfile as below:

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

And I have this attack.sh and it contains content as below:

#!/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

And if you are wondering how I pass the value to the Dockerfile, it is like this:

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 .

So the arguments are passed in below order

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

But, this is not working, it gives an empty values for these variables.

Can someone please help me?

Jananath Banuka
  • 2,951
  • 8
  • 57
  • 105

1 Answers1

3

For Docker to use your build arguments, you need to specify them by name in your Dockerfile as an ARG. Once you do that, these variables will be available for you to use as arguments.

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

I'm not sure this will do what you want it to do since the script will be run during build time. However, it will pass your arguments from the docker build command to the parameters of attack.sh.

cam
  • 4,409
  • 2
  • 24
  • 34