Die Verwendung der Anweisung RUN in einer Dockerdatei mit 'source' funktioniert nicht

Habe ich ein Dockerfile, bin ich der Zusammenstellung zu installieren Vanille-python-Umgebung (in der ich die Installation einer app, aber zu einem späteren Zeitpunkt).

FROM ubuntu:12.04

# required to build certain python libraries
RUN apt-get install python-dev -y

# install pip - canonical installation instructions from pip-installer.org
# http://www.pip-installer.org/en/latest/installing.html
ADD https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py /tmp/ez_setup.py
ADD https://raw.github.com/pypa/pip/master/contrib/get-pip.py /tmp/get-pip.py
RUN python /tmp/ez_setup.py
RUN python /tmp/get-pip.py
RUN pip install --upgrade pip 

# install and configure virtualenv
RUN pip install virtualenv 
RUN pip install virtualenvwrapper
ENV WORKON_HOME ~/.virtualenvs
RUN mkdir -p $WORKON_HOME
RUN source /usr/local/bin/virtualenvwrapper.sh

Build läuft ok bis auf die Letzte Zeile, wo bekomme ich die folgende exception:

[previous steps 1-9 removed for clarity]
...
Successfully installed virtualenvwrapper virtualenv-clone stevedore
Cleaning up...
 ---> 1fc253a8f860
Step 10 : ENV WORKON_HOME ~/.virtualenvs
 ---> Running in 8b0145d2c80d
 ---> 0f91a5d96013
Step 11 : RUN mkdir -p $WORKON_HOME
 ---> Running in 9d2552712ddf
 ---> 3a87364c7b45
Step 12 : RUN source /usr/local/bin/virtualenvwrapper.sh
 ---> Running in c13a187261ec
/bin/sh: 1: source: not found

Wenn ich ls in diesem Verzeichnis (nur um zu testen, ob die vorherigen Schritte begangen wurden) ich kann sehen, dass die Dateien vorhanden sind wie erwartet:

$ docker run 3a87 ls /usr/local/bin
easy_install
easy_install-2.7
pip
pip-2.7
virtualenv
virtualenv-2.7
virtualenv-clone
virtualenvwrapper.sh
virtualenvwrapper_lazy.sh

Wenn ich es versuche läuft gerade die source Befehl bekomme ich die gleiche 'nicht gefunden' - Fehler wie oben. Wenn ich AUSFÜHREN einer interaktiven shell-Sitzung jedoch, source funktioniert:

$ docker run 3a87 bash
source
bash: line 1: source: filename argument required
source: usage: source filename [arguments]

Kann ich das Skript von hier, und dann fröhlich Zugang workonmkvirtualenv etc.

Habe ich getan einige Graben, und zunächst sah es aus, als wenn das problem liegen könnte, dass der Unterschied zwischen bash als Ubuntu login-shellund dash als Ubuntu system-shelldash nicht die Unterstützung der source Befehl.

Jedoch, die Antwort auf diese scheint zu sein, zu verwenden '.' statt sourceaber dies nur bewirkt, dass die Docker-runtime zu sprengen, mit einem go-Panik Ausnahme.

Was ist der beste Weg, ein shell-Skript von einem Dockerfile FÜHREN Sie die Anweisung zu bekommen, um diese (Uhr läuft aus der Standard-Basis-image für Ubuntu 12.04 LTS).

InformationsquelleAutor der Frage Hugo Rodger-Brown | 2013-12-17

Schreibe einen Kommentar