rom*_*lym 6 python pip docker dockerfile
我想在Ubuntu的Docker容器中安装Python,Pip和virtualenv,我通过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
...
Run Code Online (Sandbox Code Playgroud)
当它到达这里时,它出来的结果是“ / bin / sh:1:pip:not found”,但是在安装过程中没有异常显示,这是否意味着我没有正确安装pip?还是在使用点子指令之前应该做其他事情?
然后,我像这样更改了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
...
Run Code Online (Sandbox Code Playgroud)
但它仍然在说/ bin / sh:1:virtualenv:找不到,就在这里
我也安装了git,git clone命令正确运行,可以使用。我在哪里错了,或者该怎么办?
在容器内使用虚拟环境有什么意义?Virtualenv对于本地开发非常有帮助,它允许你在一台机器上使用不同版本的python解释器和包。但是在你的docker容器中应该只有一个进程(实际上容器它是进程),并且你可以全局安装你的所有需求。
但如果你确实有充分的理由,你可能必须使用“python3 way”来创建虚拟环境。
所以你的 Dockerfile 应该是这样的:
FROM ubuntu:16.04
RUN apt-get update -y \
&& apt install python3 -y \
&& apt install python3-pip -y \
&& apt install python3-venv -y \
&& python3 -m venv venv
ENTRYPOINT bin/bash
Run Code Online (Sandbox Code Playgroud)
您可以使用命令构建它
docker build -t ubuntu-python .
Run Code Online (Sandbox Code Playgroud)
并运行
docker run --rm -it ubuntu-python
Run Code Online (Sandbox Code Playgroud)
在容器 shell 中,您可以使用命令激活 venv
source venv/bin/activate
Run Code Online (Sandbox Code Playgroud)
然后运行 python 解释器并检查它是否是从 venv 运行的:
>>> import sys
>>> sys.executable
Run Code Online (Sandbox Code Playgroud)
它应该打印/venv/bin/python
我不知道如何使用预激活(我不知道这个词是否真的存在)虚拟环境来运行容器,并且我仍然认为您实际上不需要在容器中使用虚拟环境。
另外,你最好尝试为 docker 准备好python 图像,例如 light alpine 图像,而不是扩展基本的 ubuntu 图像。
请原谅我糟糕的俄语-英语,我希望你能理解我的回答:)
在包括Debian在内的基于Debian的平台上,调用by安装的命令python3-pip是pip3为了使其与任何系统安装的Python 2及其版本和平共处pip。
类似地,该virtualenv命令不是由软件包安装的python3-virtualenv;为此,您需要apt-get install -y virtualenv。
请注意,venv它包含在Python 3标准库中,因此您根本不需要安装任何东西。
python3 -m venv newenv
Run Code Online (Sandbox Code Playgroud)
但是,为什么仍要在Docker中使用virtualenv?(在某些情况下,这是有道理的,但在大多数情况下,您希望Docker容器尽可能简单,这就是说,以root用户身份安装所有内容,并在需要更新某些内容时重建整个容器。)
顺便说一句,您通常希望最小化RUN语句的数量。在调试时制作许多层也许是可以辩护的,但是什么都不做的层绝对只是浪费。也许还发现一次apt-get可以安装多个软件包。
RUN apt-get update -y && \
apt-get install -y python3 python3-pip && \
...
Run Code Online (Sandbox Code Playgroud)
将&&导致整个RUN序列只要一个命令失败,失败。
| 归档时间: |
|
| 查看次数: |
5316 次 |
| 最近记录: |