Ctrl K
ComunidadGuías…

Dockerfile.runtime

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

Archivo original ↗Preguntar a KiBot
# Mao 用户运行时容器镜像(技术方案 §4 镜像内容 / §6 部署)
#
# 与镜像 Node ABI 匹配的 sharp / node-pty 必须随镜像安装:容器内 read_file 读图走 sharp、
# 云端终端走 node-pty,两者都是 native 模块,只读挂载宿主机 dist 带不上可用二进制。
# 宿主机 Node 升级后必须同步重建本镜像(scripts/build-runtime-image.sh),否则容器内
# 读图/pty 静默失败。
#
# 依赖清单 = runtime-agent 的 import 闭包里用到的全部第三方包(dist 只挂代码、不带
# node_modules)。backend-ts 新增进入该闭包的 npm 包时必须同步加到这里并重建镜像,
# 否则容器内 agent 启动即 ERR_MODULE_NOT_FOUND(表现为每用户任务连接超时)。
#
# 构建:bash scripts/build-runtime-image.sh(自动从 backend-ts/package.json 读取版本)
FROM node:22-bookworm-slim

ARG SHARP_VERSION=latest
ARG NODE_PTY_VERSION=latest
ARG MCP_SDK_VERSION=latest
ARG MINIMATCH_VERSION=latest
ARG YAML_VERSION=latest
# Debian 源:默认官方源;构建机访问 deb.debian.org 受限时传
# --build-arg APT_MIRROR=mirrors.aliyun.com(build-runtime-image.sh 读同名环境变量)。
ARG APT_MIRROR=deb.debian.org

RUN sed -i "s|deb.debian.org|${APT_MIRROR}|g; s|security.debian.org|${APT_MIRROR}|g" /etc/apt/sources.list.d/debian.sources \
  && apt-get update \
  && apt-get install -y --no-install-recommends \
    bash git coreutils ca-certificates curl procps \
    python3 python3-pip build-essential \
  && rm -rf /var/lib/apt/lists/*

# 原生模块安装到 /opt/mao/backend-ts/node_modules:运行时宿主机 dist 挂载到
# /opt/mao/backend-ts/dist(ro),ESM 解析从 dist 向上即命中镜像内的 node_modules。
RUN mkdir -p /opt/mao/backend-ts \
  && cd /opt/mao/backend-ts \
  && npm init -y >/dev/null \
  && npm pkg set type=module \
  && npm install --no-audit --no-fund "sharp@${SHARP_VERSION}" "node-pty@${NODE_PTY_VERSION}" "@modelcontextprotocol/sdk@${MCP_SDK_VERSION}" "minimatch@${MINIMATCH_VERSION}" "yaml@${YAML_VERSION}" \
  && npm cache clean --force

# 默认以 root 运行(决策 2:容器内 root,隔离靠挂载清单)
CMD ["node", "/opt/mao/backend-ts/dist/harness/container/runtime-agent.js"]