成功创建了一个virtualenv中(使用“mkproject”)在Dockerfile,但不能运行“workon”正确

问题描述:

编辑: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时,会发生同样的错误。

+1

为了避免虚拟环境和非交互式shell的任何问题,我们只需在环境中显式调用可执行文件:'$ WORKON_HOME/mapproxy/bin/pip'。也许这有助于... – jdno

解决:这是一个简单的错字。 mkproject maproxy而不是mapproxy。 :叹气: