news 2026/6/18 21:19:53

我用 Docker 部署了一套完整的 AI 应用:从本地开发到云端上线,全流程踩坑记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
我用 Docker 部署了一套完整的 AI 应用:从本地开发到云端上线,全流程踩坑记录

我用 Docker 部署了一套完整的 AI 应用:从本地开发到云端上线,全流程踩坑记录

适合想把本地 AI 项目部署到线上、但被 Docker/部署流程搞晕的开发者。
本文从 Dockerfile 编写到 docker-compose 编排到云端部署,附完整的踩坑记录。

背景:本地跑得好好的,部署就炸

很多人有这个经历:本地开发环境一切正常,一部署到服务器就各种报错。

“在我电脑上能跑啊”——这是部署环节最经典的问题。

Docker 解决的就是这个问题:把你的代码、依赖、配置打包成一个标准化的容器,在任何环境都能跑

阶段 1:编写 Dockerfile

Python 应用的 Dockerfile

# 基础镜像(用 slim 版减小体积) FROM python:3.12-slim # 设置工作目录 WORKDIR /app # 先复制依赖文件(利用 Docker 缓存层) COPY requirements.txt . # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码 COPY . . # 暴露端口 EXPOSE 8000 # 启动命令 CMD ["python", "app.py"]

多阶段构建(减小镜像体积)

# 阶段 1:构建 FROM python:3.12 as builder WORKDIR /app COPY requirements.txt . RUN pip install --user --no-cache-dir -r requirements.txt # 阶段 2:运行(只复制必要的文件) FROM python:3.12-slim WORKDIR /app COPY --from=builder /root/.local /root/.local COPY . . ENV PATH=/root/.local/bin:$PATH EXPOSE 8000 CMD ["python", "app.py"]

效果:镜像从 1.2GB 减小到 300MB。

阶段 2:docker-compose 编排

一个 AI 应用通常需要多个服务(前端 + 后端 + 数据库 + 模型服务)。

version:'3.8'services:# 后端 APIbackend:build:./backendports:-"8000:8000"environment:-DATABASE_URL=postgresql://user:pass@db:5432/mydb-MODEL_URL=http://model:11434depends_on:db:condition:service_healthymodel:condition:service_startedrestart:unless-stopped# 前端frontend:build:./frontendports:-"80:80"depends_on:-backendrestart:unless-stopped# 数据库db:image:postgres:16environment:POSTGRES_USER:userPOSTGRES_PASSWORD:passPOSTGRES_DB:mydbvolumes:-pgdata:/var/lib/postgresql/datahealthcheck:test:["CMD-SHELL","pg_isready -U user"]interval:5stimeout:5sretries:5restart:unless-stopped# AI 模型服务(Ollama)model:image:ollama/ollamavolumes:-ollama_data:/root/.ollamaports:-"11434:11434"restart:unless-stoppedvolumes:pgdata:ollama_data:

启动:

# 一键启动所有服务docker-composeup-d# 查看状态docker-composeps# 查看日志docker-composelogs-fbackend

阶段 3:环境变量管理

不要把密钥写在代码里,用环境变量。

# docker-compose.ymlservices:backend:environment:-OPENAI_API_KEY=${OPENAI_API_KEY}-DATABASE_URL=${DATABASE_URL}env_file:-.env
# .env 文件(不要提交到 Git)OPENAI_API_KEY=sk-xxxxxDATABASE_URL=postgresql://user:pass@db:5432/mydb
# .gitignore.env

阶段 4:数据持久化

Docker 容器重启后数据会丢失。用 Volume 持久化。

services:db:volumes:-pgdata:/var/lib/postgresql/data# 数据库数据model:volumes:-ollama_data:/root/.ollama# AI 模型文件backend:volumes:-./uploads:/app/uploads# 用户上传的文件-./logs:/app/logs# 日志文件volumes:pgdata:ollama_data:

阶段 5:健康检查

确保服务真正可用,不只是"容器在运行"。

services:db:healthcheck:test:["CMD-SHELL","pg_isready -U user"]interval:5stimeout:5sretries:5backend:healthcheck:test:["CMD","curl","-f","http://localhost:8000/health"]interval:10stimeout:5sretries:3depends_on:db:condition:service_healthy# 数据库健康后才启动后端

阶段 6:云端部署

方案 1:VPS(最简单)

# 在服务器上安装 Dockercurl-fsSLhttps://get.docker.com|sh# 上传项目scp-r./project user@server:/app/# 启动sshuser@server"cd /app && docker-compose up -d"

方案 2:云容器服务

# 推送镜像到云端仓库dockertag myapp:latest registry.example.com/myapp:latestdockerpush registry.example.com/myapp:latest# 在云控制台创建服务,指定镜像地址

方案 3:CI/CD 自动部署

# .github/workflows/deploy.ymlname:Deployon:push:branches:[main]jobs:deploy:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4-name:Build and pushrun:|docker build -t myapp:${{ github.sha }} . docker tag myapp:${{ github.sha }} registry.example.com/myapp:latest docker push registry.example.com/myapp:latest-name:Deployrun:|ssh user@server "cd /app && docker-compose pull && docker-compose up -d"

踩坑记录

坑 1:Dockerfile 缓存失效

症状:每次构建都要重新安装所有依赖,很慢。

原因COPY . .放在pip install前面,代码一改依赖层就失效。

解决:先COPY requirements.txt,再pip install,最后COPY . .

坑 2:容器内访问不到其他服务

症状:后端连接数据库报 “Connection refused”。

原因:用了localhost,但容器内的 localhost 是自己,不是宿主机。

解决:用 docker-compose 的服务名(如db)作为主机名。

# 错误DATABASE_URL="postgresql://user:pass@localhost:5432/mydb"# 正确DATABASE_URL="postgresql://user:pass@db:5432/mydb"

坑 3:.dockerignore 没写

症状:镜像有 2GB,包含了node_modules.gitvenv等无关文件。

解决:创建.dockerignore

node_modules .git venv __pycache__ *.pyc .env

坑 4:数据库数据丢失

症状docker-compose down后数据库数据全没了。

原因:没用 Volume 持久化。

解决:用docker-compose down不加-v参数(保留 Volume),或者用 named volume。

# 保留数据docker-composedown# 删除数据(慎用!)docker-composedown-v

坑 5:模型文件太大,镜像构建超时

症状:AI 模型文件有 5GB,Docker 构建时下载超时。

解决:模型文件不打包进镜像,用 Volume 挂载或者运行时下载。

坑 6:Nginx 反向代理配置错误

症状:前端能访问,但 API 请求 404。

原因:Nginx 没有正确代理/api路径到后端。

解决

server { listen 80; location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://backend:8000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

踩坑总结表

症状解决
缓存失效构建慢先 COPY requirements.txt
localhost 不通连接拒绝用服务名替代 localhost
没写 .dockerignore镜像巨大排除 node_modules/.git
数据丢失down 后数据没了用 Volume 持久化
模型太大构建超时Volume 挂载模型
Nginx 配置API 404正确配置 proxy_pass

总结

3 条核心经验:

  1. Dockerfile 的 COPY 顺序很重要。先复制依赖文件再复制代码,利用缓存层加速构建。

  2. 用 docker-compose 管理多服务。不要手动docker run,用 compose 文件声明所有服务的依赖关系和配置。

  3. Volume 持久化是必须的。数据库、模型文件、用户上传的文件都要用 Volume,否则容器重启数据就没了。


你部署 AI 应用时遇到过什么坑?评论区交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 21:19:46

FPGA上跑通的四个经典图像处理模块:中值滤波、Sobel边缘检测、腐蚀、形态学运算(Verilog纯逻辑,带实操视频)

本文还有配套的精品资源,点击获取 简介:这个资源包提供一套可在Xilinx FPGA开发板直接运行的图像处理Verilog工程,基于Vivado 2019.2,不依赖任何IP核或SDK,全部用基础Verilog语法实现。包含四个独立又可切换的功能模…

作者头像 李华
网站建设 2026/6/18 21:18:51

NetDevOps漫谈:构建基于可视化编排的网络自动化系统

引言 在上一篇文章中从“脚本小子”到“乐高玩家”:聊聊我的Python网络自动化巡检心得,核心就俩字:解耦!,和大家分享了我在传统网络自动化运维过程中遇到的一些痛点问题,并思考如何通过高内聚、低耦合的思…

作者头像 李华
网站建设 2026/6/18 21:15:21

专业音视频系统完整介绍 + 国内外主流厂家分类

一、音视频系统整体概述专业音视频(AV)系统是弱电集成核心成套系统,以音频扩声、视频显示、信号切换、中央集中控制、录播流媒体五大子系统为核心,整套设备统一组网联动,服务会议室、报告厅、指挥中心、校园、酒店、剧…

作者头像 李华
网站建设 2026/6/18 21:13:24

阿尔比恩在线数据分析工具终极指南:5步成为游戏策略大师

阿尔比恩在线数据分析工具终极指南:5步成为游戏策略大师 【免费下载链接】AlbionOnline-StatisticsAnalysis A tool with many features for the game Albion Online 项目地址: https://gitcode.com/gh_mirrors/al/AlbionOnline-StatisticsAnalysis 想要在《…

作者头像 李华
网站建设 2026/6/18 21:13:14

MPC860ADS开发板接口信号与硬件设计深度解析

1. MPC860ADS开发板接口信号与硬件设计深度解析在嵌入式系统开发的早期阶段,一块功能全面、接口清晰的评估板是工程师手中的利器。它不仅是一个验证处理器功能的平台,更是连接抽象软件逻辑与具体硬件世界的桥梁。MPC860ADS就是这样一款在PowerPC 860处理…

作者头像 李华
网站建设 2026/6/18 21:12:52

Windows 11优化终极指南:用Win11Debloat让你的电脑性能飙升51%

Windows 11优化终极指南:用Win11Debloat让你的电脑性能飙升51% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutte…

作者头像 李华