J'essaie de configurer une image simple de docker (je suis assez nouveau pour docker, donc corrigez mes idées fausses possibles) en fonction du public continuumio/anaconda3 container.
La Dockerfile
:
FROM continuumio/anaconda3:latest
# update conda and setup environment
RUN conda update conda -y \
&& conda env list \
&& conda create -n testenv pip -y \
&& source activate testenv \
&& conda env list
La construction et l’image de celle-ci par docker build -t test .
se termine par l’erreur:
/bin/sh: 1: source: not found
lors de l'activation du nouvel environnement virtuel.
Après cette réponse j'ai essayé:
FROM continuumio/anaconda3:latest
# update conda and setup environment
RUN conda update conda -y \
&& conda env list \
&& conda create -y -n testenv pip \
&& /bin/bash -c "source activate testenv" \
&& conda env list
Cela semble fonctionner au début, car il affiche: prepending /opt/conda/envs/testenv/bin to PATH
, mais conda env list
et ass assertecho $PATH
montrent clairement que cela ne fonctionne pas:
[...]
# conda environments:
#
testenv /opt/conda/envs/testenv
root * /opt/conda
---> 80a77e55a11f
Removing intermediate container 33982c006f94
Step 3 : RUN echo $PATH
---> Running in a30bb3706731
/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Les fichiers Docker fonctionnent comme un MWE . J'apprécie toutes les idées. Merci!
À l'aide de l'instruction ENV
de Docker, il est possible d'ajouter le chemin de l'environnement virtuel de manière persistante à PATH
. Bien que cela ne résolve pas l'environnement sélectionné répertorié sous conda env list
.
Voir le MWE:
FROM continuumio/anaconda3:latest
# update conda and setup environment
RUN conda update conda -y \
&& conda create -y -n testenv pip
ENV PATH /opt/conda/envs/testenv/bin:$PATH
RUN echo $PATH
RUN conda env list
Répondant à la réponse de ccauet (que je ne pouvais pas me mettre au travail) et au commentaire de Charles Duffey sur le fait qu’il ya plus qu’à PATH
, voici ce qui va régler le problème.
Lors de l'activation d'un environnement, conda définit les variables suivantes, ainsi que quelques-unes qui sauvegardent les valeurs par défaut pouvant être référencées lors de la désactivation de l'environnement. Ces variables ont été omises du fichier Docker, car l'environnement racine de conda n'a plus besoin d'être utilisé. Pour référence, il s'agit de CONDA_PATH_BACKUP
, CONDA_PS1_BACKUP
et _CONDA_SET_PROJ_LIB
. Il définit également PS1
afin d'afficher (testenv)
à gauche de la ligne d'invite du terminal, qui a également été omis. Les déclarations suivantes feront ce que vous voulez.
ENV PATH /opt/conda/envs/testenv/bin:$PATH
ENV CONDA_DEFAULT_ENV testenv
ENV CONDA_PREFIX /opt/conda/envs/testenv
Afin de réduire le nombre de couches créées, vous pouvez combiner ces commandes en une seule commande ENV définissant également toutes les variables en même temps.
Il se peut que d'autres variables doivent être définies, en fonction du package. Par exemple,
ENV GDAL_DATA /opt/conda/envs/testenv/share/gdal
ENV CPL_Zip_ENCODING UTF-8
ENV PROJ_LIB /opt/conda/envs/testenv/share/proj
Le moyen le plus simple d'obtenir ces informations consiste à appeler printenv > root_env.txt
dans l'environnement racine, à activer testenv
, puis à appeler printenv > test_env.txt
et à examiner diff root_env.txt test_env.txt
.