web-dev-qa-db-fra.com

Comment installer des packages locaux en utilisant pip dans le cadre d'une construction de docker?

J'ai un package que je veux intégrer dans une image docker qui dépend d'un package adjacent sur mon système.

Ma requirements.txt ressemble à ceci:

 - e ../other_module[.____.[numpy==1.0.0[.____. E5Eflask==0.12.5

Quand j'appelle pip install -r requirements.txt dans un virtualenv cela fonctionne très bien. Cependant, si j'appelle cela dans un Dockerfile, par exemple:

 ADD requirements.txt /app[.____..

et exécutez en utilisant docker build . Je reçois une erreur disant ce qui suit:

../other_module should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+

Qu'est-ce que je fais de mal ici?

18
AnjoMan

Tout d'abord, vous devez ajouter other_module À votre image Docker. Sans cela, la commande pip install Ne pourra pas le trouver. Cependant, vous ne pouvez pas ADD un répertoire qui est en dehors du répertoire du Dockerfile selon la documentation :

Le chemin doit être à l'intérieur du contexte de la construction; vous ne pouvez pas AJOUTER ../quelque chose/quelque chose, car la première étape d'une construction de docker consiste à envoyer le répertoire de contexte (et les sous-répertoires) au démon de docker.

Vous devez donc déplacer le répertoire other_module Dans le même répertoire que votre Dockerfile, c'est-à-dire que votre structure devrait ressembler à quelque chose comme

.
├── Dockerfile
├── requirements.txt
├── other_module
|   ├── modue_file.xyz
|   └── another_module_file.xyz

puis ajoutez ce qui suit au dockerfile:

ADD /other_module /other_module
ADD requirements.txt /app
WORKDIR /app
RUN pip install -r requirements.txt

La commande WORKDIR vous déplace dans /app Donc l'étape suivante, RUN pip install... Sera exécutée dans le répertoire /app. Et à partir du répertoire d'application, vous avez maintenant le répertoire ../other_module Disponible

21
Cleared