我有一个Dockerfile,在那里我试图激活python virtualenv什么之后,它应该在这个env中安装所有依赖项。然而,所有的东西仍然在全球范围内安装。我用了不同的方法,但都没有奏效。我也没有任何错误。哪里有问题?
一。
ENV PATH $PATH:env/bin
2。
ENV PATH $PATH:env/bin/activate
三。
RUN . env/bin/activate
我还关注了an example of a Dockerfile config for the python-runtime image on Google Cloud,这与上面的内容基本相同。
Setting these environment variables are the same as running source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
另外,ENV VIRTUAL_ENV /env
是什么意思以及如何使用它?
在容器中使用virtualenv有完全合理的理由。
您不必激活virtualenv来安装或使用软件。尝试直接从virtualenv的
bin
目录调用可执行文件:虽然我同意马库斯的观点,这不是对多克的方式,但你可以做你想做的。
直接使用Docker的RUN命令不会给你答案,因为它不会从虚拟环境中执行你的指令。相反,使用/bin/bash压缩在一行中执行的指令。以下文件对我有效:
这应该只在虚拟环境中安装pyserial模块。
您不需要在Docker容器中使用virtualenv。
virtualenv用于依赖关系隔离。您希望防止安装的任何依赖项或包在应用程序之间泄漏。Docker实现了同样的功能,它隔离了容器内的依赖关系,防止了容器之间和应用程序之间的泄漏。
因此,在Docker容器中使用virtualenv是没有意义的,除非你在同一个容器中运行多个应用程序,如果是这样的话,我会说你做错了什么,解决方案是以更好的方式设计你的应用程序,并将它们拆分到多个容器中。
相关问题 更多 >
编程相关推荐