You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker镜像中安装Python包?构建后安装的最优方案

无需重建Docker镜像安装Python包的方法及最佳实践

你遇到的问题本质是:docker compose run --rm命令启动的容器是临时的,--rm参数会在容器退出后立即销毁它,所以你安装的requests只存在于这个临时容器中,下次运行新容器时还是基于原始镜像,自然看不到新包。

下面提供几种可行方案,按适用场景分类:

临时调试:挂载本地目录保存包(仅用于开发调试)

这种方法适合临时测试包,不用修改镜像,但不适合生产环境:

  • 本地项目根目录创建一个文件夹,比如./local-packages
  • 修改docker-compose.yml的web服务,添加volume挂载(替换X.X为你的Python版本,比如3.9):
    services:
      web:
        # 原有配置(image、ports等)
        volumes:
          - ./local-packages:/usr/local/lib/pythonX.X/site-packages
    
  • 执行安装命令,指定安装路径到挂载目录:
    docker compose run --rm web sh -c "pip install requests -t /usr/local/lib/pythonX.X/site-packages"
    
    之后启动的容器都会读取这个本地目录里的包,本地也能看到安装的文件。

保留修改:将临时容器转为新镜像

如果需要长期保留包的修改,但不想重新构建镜像:

  • 启动一个不自动删除的临时容器:
    docker compose run --name temp-web-container web sh
    
  • 在容器内执行安装命令:pip install requests,完成后输入exit退出容器
  • 将这个容器提交为新镜像:
    docker commit temp-web-container your-web-image:v2  # 替换为你的镜像名和版本
    
  • 修改docker-compose.yml中web服务的image字段为新镜像名,之后启动的容器就会包含新安装的包
  • 最后清理临时容器:docker rm temp-web-container

生产环境最佳实践:更新requirements.txt并重建镜像

这是最规范的做法,适合生产环境和团队协作:

  • 把需要安装的包添加到项目根目录的requirements.txt中,比如新增一行:requests
  • 重新构建web服务的镜像:
    docker compose build web
    
    构建完成后,所有基于这个新镜像启动的容器都会包含最新的依赖包,同时requirements.txt可以通过版本控制工具管理,便于团队同步依赖。

内容的提问来源于stack exchange,提问作者Davood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:15:46