我有一个包,我想要构建一个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+
如果有的话,我在这里做错了什么?
答案 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