我想把Python,Pip和virtualenv安装在一个Docker容器中,这个容器就是Ubuntu,我通过Dockerfile创建镜像:
FROM ubuntu:16.04
RUN apt-get update -y
RUN apt-get
RUN apt-get python3 -y
RUN apt-get install python3-pip -y
RUN pip install virtualenv
...
当它出现在这里时,它出现了“/bin/sh:1:pip:no t found”,但是在安装过程中没有显示任何异常,这是否意味着我没有正确安装pip?或者在使用pip order之前,我应该做其他事情吗?
然后我像这样更改了Dockerfile:
...
RUN apt-get python3 -y
RUN apt-get install python3-pip -y
RUN apt-get install python3-virtualenv -y
RUN virtualenv --no-stie-packages -p /path/python3 py3env
...
但它仍然显示/bin/sh:1:virtualenv:not found,here is it
我还安装了git,git克隆顺序运行正确,可以使用。我错在哪里,或者我该怎么做?
在容器中使用虚拟环境有什么意义?Virtualenv对本地开发非常有帮助,它允许您在一台机器上使用不同版本的python解释器和包。但是在docker容器中应该只有一个进程(实际上容器就是进程),并且可以全局安装所有需求。
但如果您真的有很强的理由这样做,那么您可能必须使用“python3方法”来创建虚拟env。
所以你的档案应该是这样的:
你可以用命令建立它
一起跑
在容器外壳中,可以使用命令激活venv
然后运行python解释器并检查它是否从venv运行:
它应该打印
/venv/bin/python
我不知道如何使用预先激活的虚拟环境来运行容器(我不知道这个词是否真的存在),我仍然认为您实际上不需要在容器中使用虚拟环境。
另外,你最好试着为docker准备python-images,例如,轻阿尔卑斯图像,而不是扩展基本的ubuntu图像。
请原谅我糟糕的俄语英语,我希望你能理解我的回答:)
在基于Debian的平台上,包括Ubuntu,the command installed by ^{} is called ^{} ,以便它与任何系统安装的Python 2及其
pip
和平共存。类似地,}.
virtualenv
命令不是由包python3-virtualenv
安装的;要获得这个命令,you need ^{注意
venv
包含在Python 3标准库中,所以您根本不需要安装任何东西。不过,你为什么要在Docker里面装一个virtualenv呢?(有的情况是有意义的,但是在绝大多数情况下,您希望Docker容器尽可能简单,也就是说,将所有内容都作为根安装,如果需要更新,则重建整个容器。)
另外,您通常希望最小化
RUN
语句的数量。在调试时生成许多层也许是可以防御的,但是不做任何事情的层绝对是浪费。或许还会发现apt-get
一次可以安装多个包。只要其中一个命令失败,
&&
就会导致整个RUN
序列失败。相关问题 更多 >
编程相关推荐