如何使用pip作为docker build的一部分安装本地包?

时间:2017-06-22 20:07:10

标签: python docker pip

我有一个包,我想要构建一个docker镜像,这取决于我系统上的相邻包。

我的requirements.txt看起来像这样:

-e ../other_module
numpy==1.0.0
flask==0.12.5

当我在virtualenv中调用pip install -r requirements.txt时,这很好用。但是,如果我在Dockerfile中调用它,例如:

ADD requirements.txt /app
RUN pip install -r requirements.txt

并使用docker build .运行我收到错误消息,说明以下内容:

../other_module should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+

如果有的话,我在这里做错了什么?

1 个答案:

答案 0 :(得分:19)

首先,您需要将other_module添加到Docker镜像中。没有它,pip install命令将无法找到它。但是根据the documentation,你不能ADD一个位于Dockerfile目录之外的目录:

  

路径必须位于构建的上下文中;你不能添加   ../something / something,因为docker build的第一步是   将上下文目录(和子目录)发送到docker   守护进程。

因此,您必须将other_module目录移动到与Dockerfile相同的目录中,即您的结构应该类似于

.
├── Dockerfile
├── requirements.txt
├── other_module
|   ├── modue_file.xyz
|   └── another_module_file.xyz

然后将以下内容添加到dockerfile:

ADD /other_module /other_module
ADD requirements.txt /app
WORKDIR /app
RUN pip install -r requirements.txt

WORKDIR命令会将您移至/app,因此下一步RUN pip install...将在/app目录中执行。从app-directory,您现在拥有目录../other_module avaliable