Ich versuche, ein einfaches Docker-Image einzurichten ( Ich bin relativ neu im Docker, daher korrigieren Sie bitte meine möglichen Missverständnisse ) basierend auf dem öffentlichen continuumio/anaconda3 container.
Der Dockerfile
name__:
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
Gebäude und Bild davon durch docker build -t test .
endet mit dem Fehler:
/bin/sh: 1: source: not found
beim Aktivieren der neuen virtuellen Umgebung.
Folgende diese Antwort habe ich versucht:
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
Dies scheint zunächst zu funktionieren, da es Folgendes ausgibt: prepending /opt/conda/envs/testenv/bin to PATH
, aber conda env list
sowie ass echo $PATH
zeigen deutlich, dass dies nicht der Fall ist:
[...]
# 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
Die Docker-Dateien funktionieren sofort als MWE. Ich freue mich über jegliche Ideen. Vielen Dank!
Mit der Andockanweisung ENV
kann der Pfad der virtuellen Umgebung dauerhaft zu PATH
hinzugefügt werden. Obwohl dies die ausgewählte unter conda env list
aufgelistete Umgebung nicht löst.
Siehe die 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
Huckepack auf die Antwort von ccauet (was ich nicht schaffen konnte) und Charles Duffeys Kommentar, dass mehr als nur PATH
dabei ist, wird sich hier um das Problem kümmern.
Wenn Sie eine Umgebung aktivieren, legt conda die folgenden Variablen sowie einige davon fest, mit denen Standardwerte gesichert werden, auf die bei der Deaktivierung der Umgebung verwiesen werden kann. Diese Variablen wurden aus der Docker-Datei weggelassen, da die Root-Conda-Umgebung nie mehr verwendet werden muss. Als Referenz sind dies CONDA_PATH_BACKUP
, CONDA_PS1_BACKUP
und _CONDA_SET_PROJ_LIB
. Es legt auch PS1
fest, um (testenv)
links von der Eingabeaufforderungszeile des Terminals anzuzeigen, die ebenfalls weggelassen wurde. Die folgenden Anweisungen tun, was Sie wollen.
ENV PATH /opt/conda/envs/testenv/bin:$PATH
ENV CONDA_DEFAULT_ENV testenv
ENV CONDA_PREFIX /opt/conda/envs/testenv
Um die Anzahl der erstellten Layer zu verringern, können Sie diese Befehle zu einem einzigen ENV-Befehl zusammenfassen, um alle Variablen gleichzeitig festzulegen.
Möglicherweise müssen einige andere Variablen festgelegt werden, die auf dem Paket basieren. Zum Beispiel,
ENV GDAL_DATA /opt/conda/envs/testenv/share/gdal
ENV CPL_Zip_ENCODING UTF-8
ENV PROJ_LIB /opt/conda/envs/testenv/share/proj
Der einfachste Weg, diese Informationen abzurufen, besteht darin, printenv > root_env.txt
in der Root-Umgebung aufzurufen, testenv
zu aktivieren, dann printenv > test_env.txt
aufzurufen und diff root_env.txt test_env.txt
zu überprüfen.