Saya memiliki Dockerfile yang saya kumpulkan untuk menginstal lingkungan python vanilla (di mana saya akan menginstal aplikasi, tetapi di kemudian hari).
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 berjalan ok sampai baris terakhir, tempat saya mendapatkan pengecualian berikut:
[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
Jika saya ls
ke direktori itu (hanya untuk menguji bahwa langkah-langkah sebelumnya dilakukan) saya dapat melihat bahwa file ada seperti yang diharapkan:
$ 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
Jika saya mencoba menjalankan source
perintah, saya mendapatkan kesalahan 'tidak ditemukan' yang sama seperti di atas. Jika saya MENJALANKAN sesi shell interaktif, sumber tidak bekerja:
$ docker run 3a87 bash
source
bash: line 1: source: filename argument required
source: usage: source filename [arguments]
Saya dapat menjalankan skrip dari sini, dan kemudian dengan senang hati mengakses workon
, mkvirtualenv
dll.
Saya telah melakukan beberapa penggalian, dan awalnya tampak seolah-olah masalahnya mungkin terletak pada perbedaan antara bash sebagai shell login Ubuntu , dan dash sebagai shell sistem Ubuntu , dash tidak mendukung source
perintah.
Namun, jawaban untuk ini tampaknya menggunakan '.' bukan source
, tapi ini hanya menyebabkan runtime Docker meledak dengan pengecualian panik pergi.
Apa cara terbaik untuk menjalankan skrip shell dari instruksi Dockerfile RUN untuk menyiasati ini (saya kehabisan gambar dasar default untuk Ubuntu 12.04 LTS).
CMD source activate django-py35