【问题标题】:How to install a Python package inside a docker image?如何在 docker 镜像中安装 Python 包?
【发布时间】:2023-01-23 23:18:58
【问题描述】:

有没有办法在不重建 docker 镜像的情况下安装 python 包?我试过这种方式:

docker compose run --rm web sh -c "pip install requests"

但是如果我列出使用的包

docker-compose run --rm web sh -c "pip freeze"

我没有得到新的。 它看起来像是安装在容器中但没有安装在图像中。

我的问题是在构建 docker 映像后安装新 python 包的最佳方法是什么? 提前致谢

【问题讨论】:

  • 你不能编辑Dockerfile吗?
  • 您在每个命令后删除容器。你希望坚持什么?
  • 你的意思是在运行时安装包吗?或者你想用 python 包更新图像本身?即这些依赖是动态的吗?
  • @PranjalDoshi 好吧,比如说我在构建图像后需要request 如何安装它?
  • Docker 通常用于打包应用程序以进行部署。在不重建映像的情况下安装包没有多大意义,因为这些包那时不会成为已部署映像的一部分。

标签: python docker


【解决方案1】:

docker-compose 用于使用 Docker 运行多容器应用程序。

在您的情况下,您似乎使用安装了 python 的 Docker 映像作为入口点来做一些进一步的工作。

构建 docker 镜像后,您可以运行它:

$ docker run -dit -name my_container_name image_name

然后运行:

$ docker exec -ti my_container_name bash

$ docker exec -ti my_container_name sh

如果 docker 镜像中没有 bash。 这将使您能够通过 shell 访问刚刚创建的容器。然后,如果你的容器中安装了 pip,你可以像在你的操作系统上一样安装你需要的任何 python 包。

请注意,您安装的所有内容仅保留在您创建的容器中。如果你删除这个容器,你手动安装的所有东西都会消失。

【讨论】:

    【解决方案2】:

    我对 docker 了解不多,但如果你执行你的命令,docker 引擎将根据你的 web 图像启动一个新容器并运行 pip install requests 命令。执行命令后,容器将停止运行。由于您指定了 --rm 标志,因此 docker 引擎将在新容器停止后删除您的新容器,从而删除整个容器以及已安装的包。

    AFAIK 你不能在不重建图像的情况下添加包。 我知道您可以在不移除容器的情况下运行命令,并且您还可以从容器中制作图像。 (那些图像应该包括包)。

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多