Ctrl K
ComunidadGuías…

docker-compose.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# MiniMax-H3-Lite — 单机 GPU 工作台编排
#
# 用法:
#   docker compose up -d --build
#   docker compose logs -f mmh3
#   docker compose down
#
# 安全默认:仅绑定本机回环(127.0.0.1:18080)。
# 如需局域网/公网暴露,改为 `0.0.0.0:18080:18080` 并经反向代理(nginx/caddy)+ 鉴权,
# 因为本工作台 API 本身无内置认证(见 云原生与容器化评估提示词 P0)。

services:
  mmh3:
    build:
      context: .
      dockerfile: Dockerfile
    # 不可变 tag:避免 :latest 浮动(评估提示词 §2.8 / 反模式 #5 P1)。
    # 语义 tag 与 torch 版本 + CUDA 版本对齐,可复现,是 compose 主文件应保持的形态。
    # ⚠ digest 固化【请勿手改下面这一行】:不同机器 image ID 不同,写死 @sha256 会让他人
    #   build 出的镜像无法匹配(SOP-8 明确禁止在主 compose 写 @sha256)。正确做法:
    #   ① 单机/团队内不可变 pin → 跑 `pwsh scripts/build_and_pin.ps1`
    #      (自动 build → tag → 取 image ID → 生成 `docker-compose.pinned.yml` 覆盖层);
    #      启动用 `docker compose -f docker-compose.yml -f docker-compose.pinned.yml up -d`
    #   ② release/CI 级可移植 pin → 先 push 到 registry,取 RepoDigests 后按 SOP-8-B 处理。
    image: minimax-h3-lite:2.9.1-cu130
    container_name: mmh3-workbench
    restart: unless-stopped
    # P2-b(评估 v1.0.0 R2):优雅关闭宽限期 15m,覆盖分钟级视频生成
    # (INFERENCE_TIMEOUT=600s),避免默认 10s SIGTERM 中断在跑任务。
    stop_grace_period: 15m
    # P3-b(评估 v1.0.0 R7):显式属主,消除对宿主 preflight/Windows UID 映射的耦合
    # (preflight.sh 的 chown 兜底仍保留)。容器内 appuser uid=1000。
    user: "1000:1000"
    # 本地镜像优先:build 完成后用本地;不主动 pull 远端
    # (若需用 registry 拉取镜像,把 build 段删掉即可)
    pull_policy: never
    # 日志轮转:单文件 10MB × 3 个,防止长跑撑爆磁盘
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    ports:
      # 默认仅本机;对外暴露请改 0.0.0.0:18080 并经反代 + 鉴权
      - "127.0.0.1:18080:18080"
    environment:
      # MMH3_PORT 在 Dockerfile ENV 已声明(18080),compose 不再重复;如需覆盖按
      # `environment: - MMH3_PORT=19090` 重新加回即可
      - HF_HUB_OFFLINE=1
      - TRANSFORMERS_OFFLINE=1
      - MODELSCOPE_OFFLINE=1
      - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
      - COMFYUI_DISABLE_UPDATE_CHECK=1
    volumes:
      # 注:Windows 主机下 model/ 子目录通常是 NTFS Junction 指 ComfyUI 安装位置。
      # Docker Desktop -> WSL2 -> Linux 容器默认会跟随同盘 Junction 成功挂载;
      # 跨盘 / 跟随失败 / 迁移到非 Windows 主机时,跑 scripts/convert_model_junctions.ps1
      # (默认 dry-run,加 -Apply 才真转换;114GB 级别,磁盘需留出 ~peak+5GB 余量)。
      - ./model:/app/model:ro            # 权重目录(需事先放置;镜像不含权重)
      - ./data:/app/data                 # SQLite 等运行时数据(持久化)
      - ./uploads:/app/uploads           # 用户上传(持久化)
      - ./outputs:/app/outputs           # 生成产物(持久化)
      - ./comfy_kernel:/app/comfy_kernel:ro
    # ⚠ 卷属主:容器内以 uid 1000(appuser) 运行,宿主机挂载目录若属主不匹配会导致写入失败。
    # 首次运行前可 `sudo chown -R 1000:1000 data uploads outputs`,或在部署侧显式指定 user。
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    healthcheck:
      # P2-a(评估 v1.0.0 R1 / D1-a):解析 JSON 的 model_loaded,仅模型就绪才 healthy。
      # 与 Dockerfile HEALTHCHECK 对齐;模型惰性加载,冷启动未推理前持续 unhealthy
      # (restart: unless-stopped 不依 health 重启,仅影响监控直觉)。
      test: ["CMD", "python", "-c", "import sys,json,urllib.request; d=json.load(urllib.request.urlopen('http://127.0.0.1:18080/api/health')); sys.exit(0 if d.get('model_loaded') else 1)"]
      interval: 30s
      timeout: 10s
      retries: 3
      # H3 模型首次加载常超 2 分钟;冷启动机器建议 300s(与 Dockerfile HEALTHCHECK 一致)
      start_period: 300s