我有一个Dockerfile,在这里我尝试激活python之后,它应该安装这个env中的所有依赖项。然而,所有的东西仍然在全球范围内安装。我用了不同的方法,但都不管用。我也不会有任何错误。哪里有问题?
ENV PATH $PATH:env/bin
ENV PATH $PATH:env/bin/activate
RUN . env/bin/activate
我还跟踪了Google上python运行时映像的Dockerfile配置示例,它基本上与上面的内容相同。
设置这些环境变量与运行源代码/env/bin/activate相同。
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
此外,ENV VIRTUAL_ENV /env
意味着什么以及它是如何使用的?
发布于 2018-02-01 12:29:55
您不需要在DockerContainer.中使用虚拟环境。
virtualenv用于依赖隔离。您希望防止安装的任何依赖项或包在应用程序之间泄漏。Docker实现了同样的功能,它隔离了容器中的依赖项,防止了容器之间和应用程序之间的泄漏。
因此,除非您在同一个容器中运行多个应用程序,否则在Docker容器中使用virtualenv是没有意义的,如果是这样的话,我会说您做错了什么,解决方案是以更好的方式架构您的应用程序,并将它们拆分到多个容器中。
编辑2022:如果这个答案获得了大量的视图,我认为在4年后的今天,我意识到实际上在Docker映像中使用虚拟环境是有意义的,特别是在进行多阶段构建时:
FROM python:3.9-slim as compiler
ENV PYTHONUNBUFFERED 1
WORKDIR /app/
RUN python -m venv /opt/venv
# Enable venv
ENV PATH="/opt/venv/bin:$PATH"
COPY ./requirements.txt /app/requirements.txt
RUN pip install -Ur requirements.txt
FROM python:3.9-slim as runner
WORKDIR /app/
COPY --from=compiler /opt/venv /opt/venv
# Enable venv
ENV PATH="/opt/venv/bin:$PATH"
COPY . /app/
CMD ["python", "app.py", ]
在上面的Dockerfile
示例中,我们在/opt/venv
上创建一个虚拟and并使用ENV
语句激活它,然后我们将所有依赖项安装到这个/opt/venv
中,并且可以简单地将这个文件夹复制到我们构建的runner
阶段。这可以帮助最小化码头图像大小。
发布于 2018-08-19 16:13:56
在容器中使用virtualenv有完全合理的理由。
您不一定需要激活virtualenv来安装或使用它。尝试直接从virtualenv的bin
目录调用可执行文件:
FROM python:2.7
RUN virtualenv /ve
RUN /ve/bin/pip install somepackage
CMD ["/ve/bin/python", "yourcode.py"]
您还可以设置PATH环境变量,以便所有进一步的Python命令都使用虚拟环境中的二进制文件,如https://pythonspeed.com/articles/activate-virtualenv-dockerfile/中所述。
FROM python:2.7
RUN virtualenv /ve
ENV PATH="/ve/bin:$PATH"
RUN pip install somepackage
CMD ["python", "yourcode.py"]
发布于 2019-05-24 05:48:34
设置此变量
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
与仅仅运行
RUN . env/bin/activate
因为单个RUN
中的激活不会影响Dockerfile中该RUN
下面的任何行。但是通过ENV
设置环境变量将激活所有RUN
命令的虚拟环境。
请看下面的示例:
RUN virtualenv env # setup env
RUN which python # -> /usr/bin/python
RUN . /env/bin/activate && which python # -> /env/bin/python
RUN which python # -> /usr/bin/python
因此,如果您确实需要为整个Dockerfile激活virtualenv,则需要执行如下操作:
RUN virtualenv env
ENV VIRTUAL_ENV /env # activating environment
ENV PATH /env/bin:$PATH # activating environment
RUN which python # -> /env/bin/python
https://stackoverflow.com/questions/48561981
复制相似问题