我有一个包,我想要构建一个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应该是本地项目的路径或者以svn,git,hg或bzr开头的VCS url
如果有的话,我在这里做错了什么?
最佳答案
首先,您需要将other_module添加到Docker镜像中.没有它,pip install命令将无法找到它.但是根据the documentation,您无法添加Dockerfile目录之外的目录:
The path must be inside the context of the build; you cannot ADD
../something /something,because the first step of a docker build is
to send the context directory (and subdirectories) to the docker
daemon.
因此,您必须将other_module目录移动到与Dockerfile相同的目录中,即您的结构应该类似于
.
├── Dockerfile
├── requirements.txt
├── other_module
| ├── modue_file.xyz
| └── another_module_file.xyz
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