Docker:如何获取virtualenv并安装requirements.txt?

我不知道我在这里错过了什么。 canonicaliser_api包含我的代码和一个requirements.txt

 FROM ubuntu:14.04.2 RUN rm /bin/sh && ln -s /bin/bash /bin/sh RUN apt-get -y update && apt-get upgrade -y RUN apt-get install python build-essential python-dev python-pip python-setuptools -y RUN apt-get install libxml2-dev libxslt1-dev python-dev -y RUN apt-get install libpq-dev postgresql-common postgresql-client -y RUN apt-get install openssl openssl-blacklist openssl-blacklist-extra -y RUN apt-get install nginx -y RUN pip install virtualenv uwsgi ADD canonicaliser_api /home/ubuntu RUN virtualenv /home/ubuntu/canonicaliser_api/venv RUN source /home/ubuntu/canonicaliser_api/venv/bin/activate && pip install -r /home/ubuntu/canonicaliser_api/requirements.txt RUN echo "daemon off;" >> /etc/nginx/nginx.conf EXPOSE 80 CMD service nginx start 

当我试图build立它,一切都很好,直到第11步:

 Step 11 : RUN source /home/ubuntu/canonicaliser_api/venv/bin/activate && pip install -r /home/ubuntu/canonicaliser_api/requirements.txt ---> Running in 7aae5bd92b70 /home/ubuntu/canonicaliser_api/venv/local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. InsecurePlatformWarning Could not open requirements file: [Errno 2] No such file or directory: '/home/ubuntu/canonicaliser_api/requirements.txt' The command '/bin/sh -c source /home/ubuntu/canonicaliser_api/venv/bin/activate && pip install -r /home/ubuntu/canonicaliser_api/requirements.txt' returned a non-zero code: 1 

但是这没有任何意义,我通过ADD在Dockerfile中添加了整个代码目录。 我在这里想念什么?

 bash-3.2$ ls canonicaliser_api/requirements.txt canonicaliser_api/requirements.txt bash-3.2$ 

用法是:ADD [源目录或URL] [目的地目录]

您需要将文件夹名称添加到目标:

 ADD canonicaliser_api /home/ubuntu/canonicaliser_api 

复制目录时必须小心,特别是在目标目录不存在的情况下。 总之,这是行不通的。

 ADD canonicaliser_api /home/ubuntu 

但是这应该:

 ADD canonicaliser_api /home/ubuntu/canonicaliser_api 

一般来说,最好避免使用ADD指令并使用COPY 。 在这种情况下,这只是一个直接的替代品。

将来,debugging这样的东西的方法是把最后一个成功构build的镜像(在这个例子中是ADD行),并从中启动一个容器。 然后,您可以尝试运行有问题的指令,找出发生了什么问题。