AI服务器微服务配置用Docker Compose拆分推理与网关

在单台 AI 服务器上做微服务配置,核心是把推理模型、API 网关和监控拆成独立容器,用 Docker Compose 统一编排,而不是把所有进程塞进一个镜像。
下面按准备、编排、验证和排错顺序说明,适合已装好 GPU 驱动和 Docker 的 Linux 服务器。

先确认 GPU 容器能正常调用

微服务里最关键的容器是推理服务,它必须能访问显卡。
安装 NVIDIA Container Toolkit 后,用官方镜像做一次最小验证:

docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

能看到显卡型号和驱动版本,才说明容器运行时配置正确。
如果提示 could not select device driver,先检查 nvidia-ctk runtime configure --runtime=docker 是否执行过,并重启 Docker。

准备目录时建议按服务拆分,避免配置文件互相覆盖:

mkdir -p /opt/ai-stack/{model,gateway,monitor}

用 Compose 定义三个微服务

一个可落地的拆分方式是:模型推理服务负责加载权重并暴露 HTTP 接口,网关负责统一入口和鉴权,监控容器负责采集指标。
在 /opt/ai-stack/docker-compose.yml 中写入:

services:
  inference:
    image: your-registry/inference:latest
    runtime: nvidia
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    ports:
      - "8000:8000"
    volumes:
      - ./model:/models:ro
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      retries: 3

  gateway:
    image: nginx:1.27-alpine
    ports:
      - "80:80"
    volumes:
      - ./gateway/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - inference

  monitor:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"

这里 runtime: nvidia 和 deploy.resources 二选一即可,新版 Compose 推荐后者。
网关配置里把 /v1/ 转发到 inference:8000,容器之间直接用服务名通信,不需要写服务器 IP。

启动并逐层验证

先拉取镜像并后台启动:

cd /opt/ai-stack
docker compose up -d
docker compose ps

三个服务都应显示 running,推理服务的健康状态应为 healthy。
接着分别验证:

  • 推理直连:curl http://127.0.0.1:8000/health 返回 200。
  • 网关转发:curl http://127.0.0.1/v1/models 能拿到模型列表。
  • 监控目标:访问 http://服务器IP:9090,在 Targets 页面确认推理服务已上线。

如果网关返回 502,先看 docker compose logs gateway,再确认 inference 容器是否真的监听在 8000 端口。

常见坑与处理方式

显存不足导致容器反复重启:用 docker stats 和 nvidia-smi 对照查看,推理容器启动时如果显存被其他进程占用,会直接退出。
先停掉无关的 Jupyter 或旧推理进程,再设置 NVIDIA_VISIBLE_DEVICES 限定使用的卡。

端口冲突:宿主机已有服务占用 80 或 8000 时,docker compose up 会报 port is already allocated。
用 ss -lntp | grep :80 找到占用进程,改 Compose 里的宿主机端口映射,例如 "8080:80"。

模型文件权限:挂载 ./model 为只读后,容器内用户可能无权限读取权重。
确认文件属主与容器运行用户一致,或在 Compose 中增加 user: "1000:1000" 统一身份。

网关配置改完不生效:Nginx 容器需要重载,执行 docker compose exec gateway nginx -s reload,不要直接重启整个栈。

配置是否生效的检查清单

完成上述步骤后,按下面几项复查:docker compose ps 全部为 running;
推理健康检查连续通过;
网关能返回推理接口结果;
Prometheus Targets 中推理服务为 UP;nvidia-smi 显示推理进程占用显存。
满足这些条件,说明 AI 服务器微服务配置已经具备基本可用性,后续再按业务增加副本或鉴权即可。

分享到:
上一篇
用 Knative 给 AI 服务器做 Serverless 推理配置
下一篇
AI服务器DevOps配置:用Ansible批量管好GPU推理节点
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意