編輯:Solved-錯字成功創建了一個virtualenv中(使用「mkproject」)在Dockerfile,但不能運行「workon」正確
我有一個Dockerfile,成功地創建使用virtualenvwrapper一個的virtualenv(與建立沿在我們的正常環境中一堆「標準」設置/軟件包)。我將生成的圖像用作「基本圖像」以供進一步使用。迄今爲止都很好。但是,下面的Dockerfile(基於第一形象,「base_image_14.04」),在最後一行落下:
FROM base_image_14.04
USER root
RUN DEBIAN_FRONTEND=noninteractive \
apt-get update && apt-get install -y \
libproj0 libproj-dev \
libgeos-c1v5 libgeos-dev \
libjpeg62 libjpeg-dev \
zlib1g zlib1g-dev \
libfreetype6 libfreetype6-dev \
libgdal20 libgdal-dev \
&& rm -rf /var/lib/apt/lists
USER webdev
RUN ["/bin/bash", "-ic", "mkproject maproxy"]
EXPOSE 80
WORKDIR $PROJECT_HOME/mapproxy
ADD ./requirements.txt .
RUN ["/bin/bash", "-ic", "workon mapproxy && pip install -r requirements.txt"]
的「mkproject mapproxy」工作正常。如果我註釋掉最後一行,它會成功構建,我可以啓動容器並手動運行「workon mapproxy」,而不是問題。但是,當我試着和最後一行構建,它提供了workon錯誤:
ERROR: Environment 'mapproxy' does not exist. Create it with 'mkvirtualenv mapproxy'.
workon被調用,但由於某種原因不能找到mapproxy的virtualenv。
WORKON_HOME & PROJECT_HOME都存在(在父映像中定義)並指向正確的位置(並且已經被「mkproject mapproxy」成功使用)。
那麼,爲什麼workon在存在缺陷virtualenv時返回一個錯誤?當我將最後一行隔離到第二個第三個Dockerfile時,會發生同樣的錯誤。
爲了避免虛擬環境和非交互式shell的任何問題,我們只需在環境中顯式調用可執行文件:'$ WORKON_HOME/mapproxy/bin/pip'。也許這有助於... – jdno