gr68
gr68

Reputation: 502

How to install a python module in a docker container

My Docker knowledge is very poor, I have Docker installed only because I would use freqtrade, so I followed this simple HOWTO

https://www.freqtrade.io/en/stable/docker_quickstart/

Now , all freqtrade commands run using docker , for example this

D:\ft_userdata\user_data>docker-compose run --rm freqtrade backtesting --config user_data/cryptofrog.config.json --datadir user_data/data/binance --export trades --stake-amount 70 --strategy CryptoFrog -i 5m

Well , I started to have problems when I would had try this strategy https://github.com/froggleston/cryptofrog-strategies for freqtrade . This strategy requires Python module finta . I understood that the Python module finta should be installed in my Docker container and NOT in my Windows system (it was easy "pip install finta" from console!).

Even if I tried to find a solution over stackoverflow and google, I do no understand how to do this step (install finta python module in freqtrade container). after several hours I am really lost.

Someone can explain me in easy steps how to do this ?

Freqtrade mount point is D:\ft_userdata\user_data

Upvotes: 0

Views: 11373

Answers (3)

psorab
psorab

Reputation: 154

The way to get our Python code running in a container is to pack it as a Docker image and then run a container based on it. enter image description here

To generate a Docker image we need to create a Dockerfile that contains instructions needed to build the image. The Dockerfile is then processed by the Docker builder which generates the Docker image. Then, with a simple docker run command, we create and run a container with the Python service.

An example of a Dockerfile containing instructions for assembling a Docker image for Python service installing finta is the following

# set base image (host OS)
FROM python:3.8

# install dependencies
RUN pip install finta

# command to run on container start
CMD [ "python", "-V" ]

For each instruction or command from the Dockerfile, the Docker builder generates an image layer and stacks it upon the previous ones. Therefore, the Docker image resulting from the process is simply a read-only stack of different layers.

docker build -t myimage .

Then, we can check the image is in the local image store:

docker images

Please refer to the freqtrade DockerFile https://github.com/freqtrade/freqtrade/blob/develop/Dockerfile

Upvotes: 0

Hans Kilian
Hans Kilian

Reputation: 25070

You need to make your own docker image that has finta installed. Luckily you can build on top of the standard freqtrade docker image.

First make a Dockerfile with these two lines in it

FROM freqtradeorg/freqtrade:stable
RUN pip install finta

Then build the image (calling the new image myfreqtrade) by running the command

docker build -t myfreqtrade .

Finally change the docker-compose.yml file to run your image by changing the line

image: freqtradeorg/freqtrade:stable

to

image: myfreqtrade

And that should be that.

Upvotes: 2

Ali Irani
Ali Irani

Reputation: 607

You can get bash from your container with this command:

docker-compose exec freqtrade bash

and then:

pip install finta

OR run only one command:

docker-compose exec freqtrade pip install finta

If the above solutions didn't work, You can run docker ps command and get container id of your container. Then

docker exec -it CONTAINER_ID bash
pip install finta

Upvotes: 3

Related Questions