Pass arguments to Python argparse within Docker container
The way you do it depends on how your using docker. If you want to run your script in an already running container, you can use exec:
docker exec <yourContainerName> python <yourScript> <args>
Alternatively, if you have a docker image where your script is the ENTRYPOINT, any arguments you pass to the docker run command will be added to the entrypoint.
So, if your docker file looks like this:
FROM yourbase....ENTRYPOINT <yourScript>
Then you can just run the script by running the container itself:
docker run --rm <yourImageName> <args>
Based on your comment below, it looks like you want this option. You should change your dockerfile to specify
ENTRYPOINT ["python","./script.py"]
(instead of using CMD)and then you can run via:
docker run --rm <yourImageName> -a API_KEY - f FILENAME -o ORG_ID
So let's assume your command is below
python app.py "URL" "APIKEY" "filepath"
So you will put your Dockerfile in below fashion
FROM python:3.6WORKDIR /appCOPY app.py .ENTRYPOINT ["python", "app.py"]
Then the person running the docker container would do it like below
docker run -v /home/tarun/project/filetoparse.yaml:/config.yaml <yourimagename> "URL" "APIKEY" /config.yaml
If you want to give more flexibility you an can even use environment variables
docker run -v /home/tarun/project/filetoparse.yaml:/config.yaml -e APIKEY="XYZ" <dockerimage> "URL" /config.yaml
And then in your script you can read it using os.environ['APIKEY']
Inside Dockerfile
, i use the CMD command like this:
FROM python:3COPY ./app /appWORKDIR /appRUN pip install --upgrade pipRUN pip install --no-cache-dir -r req.pipCMD ["python","start.py","(api-url) ","(api-key)","(file-path)"]
Note Per each args/params, separate with coma
If you are using flags, you will need to split
CMD ["python","start.py","-u","(api-url) ","-k","(api-key)","-f","(file-path)"]