【问题标题】:Docker: "Unknown instruction: VIRTUALENV'Docker:“未知指令:VIRTUALENV”
【发布时间】:2015-07-31 17:16:42
【问题描述】:

Dockerfile

FROM ubuntu:14.04.2

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 ~
virtualenv ~/canonicaliser_api/venv
source ~/canonicaliser_api/venv/bin/activate
pip install -r ~/canonicaliser_api/requirements.txt

RUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80

CMD service nginx start

构建错误:

...
Successfully installed virtualenv uwsgi
Cleaning up...
 ---> 0c141e23f725
Removing intermediate container d9fd3c20365d
Step 8 : ADD canonicaliser_api ~
 ---> 89b4fb40dba5
Removing intermediate container b0c1ad946fc4
Step 9 : VIRTUALENV 
Unknown instruction: VIRTUALENV

它应该删除那些容器吗? 为什么没有看到virtualenv

【问题讨论】:

    标签: python docker boot2docker


    【解决方案1】:

    是否应该移除那些容器?

    是的。如果您出于某种原因想要保留它们,请将--rm=false 传递给docker build 命令。

    为什么没有看到virtualenv

    它看到了它,但是因为它在行首,所以它把它当作 Dockerfile 指令,但没有“VIRTUALENV”指令。据推测,您的意思是将RUN 放在ADD 之后的每一行之前:

    ADD canonicaliser_api ~
    RUN virtualenv ~/canonicaliser_api/venv
    
    # This one needs to be a single RUN so the "source" will affect pip.
    RUN source ~/canonicaliser_api/venv/bin/activate && \
            pip install -r ~/canonicaliser_api/requirements.txt
    

    【讨论】:

    • 感谢您的提示。最后一行给了我一个奇怪的错误:Could not open requirements file: [Errno 2] No such file or directory: '/root/canonicaliser_api/requirements.txt' 但它就在那里......
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2021-08-30
    • 2011-12-12
    相关资源
    最近更新 更多