31

I created a docker container with a python script. The python script takes an input file, does some processing and saves output file at some specified location.

docker run /app/script.py --input /data/input.csv --output /data/output.csv

Since the input file can be different every time I run the script, I want it to be outside the docker container. I also would like to store the output somewhere outside the container.

docker run /app/script.py --input /my/local/location/outside/docker/input.csv --output /my/local/location/outside/docker/output.csv

Does docker support this? If so, how would one be able to achieve it?

My Dockerfile looks like the following:

FROM phusion/baseimage

RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y python-dev
RUN apt-get install -y python-pip
RUN apt-get install -y python-numpy && \
    apt-get install -y python-scipy

COPY ./requirements.txt /app/requirements.txt
COPY ./src/script.py /app/script.py

WORKDIR /app
COPY . /app
Abhishek Thakur
  • 16,337
  • 15
  • 66
  • 97

2 Answers2

21

You could mount a directory with the file inside as a Docker data volume using the -v option: https://docs.docker.com/engine/tutorials/dockervolumes/

docker run -d -P --name myapp -v /app mydir/app python script.py

This will have the added benefit of allowing you to stop the container, make changes to the file, and start the container and see the change reflected within the container.

Rome_Leader
  • 2,518
  • 9
  • 42
  • 73
0

so you should add to your Dockerfile a line

ENTRYPOINT ["python","/app/script.py"]

and a

CMD myinput

or something similar,

read

What is the difference between CMD and ENTRYPOINT in a Dockerfile?

read the docs about

https://docs.docker.com/engine/reference/builder/#entrypoint

and

https://docs.docker.com/engine/reference/builder/#cmd

Community
  • 1
  • 1
user2915097
  • 30,758
  • 6
  • 57
  • 59
  • this would only work if `myinput` refers to a file already inside the container; furthermore OP states they want the file to be different every time. to achieve that, `--mount` or `-v` are necessary. – axolotl Feb 03 '22 at 21:17