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

我有一个包,我想要构建一个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

然后将以下内容添加到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

相关文章

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Li...
1、什么是docker?答:docker是开源的应用容器引擎;开发人员把他们的应用及依赖包打包发布到容器当中。...
1、什么是namespace? 答:名称空间,作用隔离容器 2、namespace隔离有那些? 答:ipc:共享内存、消息队...
1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 答:可以 2 、如何将一台宿主机的docker环境...
环境要求: IP hostname 192.168.1.1 node1 项目规划: 容器网段:172.16.10.0/24 NGINX:172.16.10.10...
文档上传地址:https://files.cnblogs.com/files/lin-strive/07-docker%E8%B7%A8%E4%B8%BB%E6%9C%BA%E7...