此问题在此处已有答案:
How to share python libraries from host to multiple docker containers?(1个答案)
16小时前关门了。
我有几个项目使用非常大的Python包。我想把每个项目放在不同的docker容器中。为了保存磁盘空间,我想把大的Python包安装在底层服务器上,这样每个docker容器就可以使用它们,而不需要分别安装在每个容器中。每个项目可能还有一些其他的Python包,可以本地安装在项目的容器上。
是否可以让Docker容器使用底层服务器中的一些Python库,而使用容器本身中的其他库?
1条答案
按热度按时间c3frrgcw1#
在容器和主机之间共享文件的方法是通过卷或绑定挂载,将python库挂载到容器中似乎很方便。
为了避免在主机的库可能发生更改时容器出现其他问题,我建议在主机上设置一个虚拟环境并挂载生成的目录。
此外,由于库将在多个容器之间共享,并且应该安装 * 额外的、单独的库 *,因此我们希望确保没有任何更改反映到主机,即以只读方式装载共享库。
确保在主机上使用 * 相同的python版本(请阅读:在虚拟环境中)和容器中 *。在下面的最小示例中,主机运行python 3.8,因此为容器选择了相同的版本。
示例:
创建一个虚拟环境,cd到根目录并激活它。
安装要与容器共享的包,然后离开虚拟环境。
创建一个可以访问我们的venv的容器。整个venv文件夹
sharedwithdocker
被挂载到/from-host
。注意ro
(只读),它确保容器内的任何更改都不会写入主机。这意味着pip会将新的包安装到用户目录。(如果您在构建映像时安装了包,这可能不相关。)环境变量告诉python和pip在哪里查找库。根据您选择的基础映像,默认路径可能会略有不同。* 注意:这假设您仍然在venv目录(
$(pwd)
)* 中。正如预期的那样,我们将看到:* 默认为用户安装,因为常规站点包不可写 *。
列出已安装的软件包以验证是否一切正常:
而且python也能和它一起工作: