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?
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