用 Docker 把 Python AI 小工具装进盒子:一次构建,到处运行

举报
yd_277333647 发表于 2026/11/02 22:20:42 2026/11/02
【摘要】 用 Docker 把 Python AI 小工具装进盒子:一次构建,到处运行很多 AI 小工具最初都是一个 Python 脚本:读一段文本,调用模型接口,输出摘要。本地跑没问题,换台机器就遇到 Python 版本、依赖冲突、环境变量丢失。Docker 的价值就在这儿:把脚本和运行环境一起打包,让“能跑”变成可复现的“到处能跑”。下面用一个极简文本摘要工具演示。它通过环境变量读取 API Ke...

用 Docker 把 Python AI 小工具装进盒子:一次构建,到处运行
很多 AI 小工具最初都是一个 Python 脚本:读一段文本,调用模型接口,输出摘要。本地跑没问题,换台机器就遇到 Python 版本、依赖冲突、环境变量丢失。Docker 的价值就在这儿:把脚本和运行环境一起打包,让“能跑”变成可复现的“到处能跑”。

下面用一个极简文本摘要工具演示。它通过环境变量读取 API Key 和接口地址,用 requests 调兼容 OpenAI 的接口。先看项目结构:

text
summarizer/
├── Dockerfile
├── requirements.txt
└── app .py
requirements.txt 只放必要依赖:

text
requests==2.32.3
app .py 核心逻辑如下,省略异常细节:

python
import os, sys, requests

api_key = os.environ[“AI_API_KEY”]
base_url = os.environ[“AI_BASE_URL”]
text = sys.stdin.read().strip()

resp = requests.post(
f"{base_url}/chat/completions",
headers={“Authorization”: f"Bearer {api_key}"},
json={
“model”: os.getenv(“AI_MODEL”, “gpt-4o-mini”),
“messages”: [
{“role”: “system”, “content”: “用三句话总结用户输入。”},
{“role”: “user”, “content”: text},
],
},
timeout=60,
)
resp.raise_for_status()
print(resp.json()[“choices”][0][“message”][“content”])
关键点是:密钥和接口地址不写进代码,也不写进镜像,运行时通过 -e 注入。接着写 Dockerfile:

dockerfile
FROM python:3.12-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app .py .
ENTRYPOINT [“python”, “app. py”]
构建和运行:

bash
docker build -t summarizer:0.1 .
echo “Docker 是一种轻量级容器技术……” |
docker run --rm -i
-e AI_API_KEY=“AIAPIKEY" −eAIBASEURL="AI_API_KEY" \ -e AI_BASE_URL="AI_BASE_URL”
summarizer:0.1
这里 -i 让容器接收标准输入,–rm 跑完自动删除容器。若你用的是宿主机上的本地模型服务,Linux 下不能直接写 localhost,因为容器里的 localhost 是容器自己。可以加:

bash
–add-host=host.docker.internal:host-gateway
-e AI_BASE_URL=“$LOCAL_AI_BASE_URL”
其中 LOCAL_AI_BASE_URL 由你在宿主机上设为本地模型服务的兼容接口地址。

第一个常见坑是镜像越建越大。开发阶段频繁改代码时,把依赖安装放在 COPY app .py 之前,能充分利用层缓存;生产镜像尽量用 slim 基础镜像,并加 .dockerignore 排除 .git、pycache、测试数据。第二个坑是密钥泄漏:不要用 ENV AI_API_KEY=… 写进 Dockerfile,因为镜像层可被查看;用运行时环境变量或 Docker secret。第三个坑是输出缓冲:容器里 Python 的 stdout 可能延迟,调试时可设 PYTHONUNBUFFERED=1。

这套模式可以复用到很多 AI 工具:换掉 app .py,就能封装 OCR、向量化、批量翻译或本地 RAG 脚本。Docker 不负责让模型更聪明,但它能让你少花时间在“为什么这台机器又跑不起来”上。先让工具可复现,再谈优化,是入门阶段最划算的一步。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。