Files
danghuangshang/Dockerfile
wanikua f5b1879830 fix: 添加入口脚本复制(Docker 镜像)
添加:
- 复制 entrypoint.sh 到镜像
- 设置执行权限
2026-03-29 11:10:05 +00:00

113 lines
3.2 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# syntax=docker/dockerfile:1
# Platform: linux/amd64, linux/arm64
# AI 朝廷 · 优化版 Docker 镜像
# 特点:多阶段构建、层缓存优化、体积减小、安全加固
# ============================================
# 阶段 1: GUI 前端构建
# ============================================
FROM node:22-alpine AS gui-builder
WORKDIR /build
# 复制依赖文件(利用 Docker 层缓存)
COPY gui/package.json gui/package-lock.json ./
RUN npm ci --loglevel=error
# 复制源码并构建
COPY gui/ ./
RUN npx tsc -b && npx vite build --emptyOutDir
# ============================================
# 阶段 2: 主镜像
# ============================================
FROM node:22-alpine
# 元数据
LABEL maintainer="wanikua" \
description="AI 朝廷 - 多 Agent 协作框架" \
org.opencontainers.image.source="https://github.com/wanikua/danghuangshang" \
org.opencontainers.image.version="3.6.0" \
org.opencontainers.image.licenses="MIT"
# 安装系统依赖(合并为单层减小体积)
RUN apk add --no-cache \
bash \
curl \
git \
ca-certificates \
gnupg \
chromium \
jq \
python3 \
py3-pip \
&& rm -rf /var/cache/apk/* \
&& rm -rf /tmp/*
# 环境变量
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium \
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
NODE_ENV=production \
PYTHONUNBUFFERED=1
# 安装 OpenClaw全局
RUN npm install -g openclaw@latest --loglevel=error
# 安装 OpenViking可选失败不影响构建
RUN python3 -m venv /opt/openviking && \
(/opt/openviking/bin/pip install --no-cache-dir openviking 2>/dev/null && \
ln -sf /opt/openviking/bin/openviking /usr/local/bin/openviking) || \
echo "⚠ OpenViking 安装跳过(不影响核心功能)"
ENV PATH="/opt/openviking/bin:$PATH"
# 创建非特权用户(安全加固)
RUN addgroup -S court && adduser -S court -G court -h /home/court -s /bin/bash
# 创建工作目录
ARG WORKSPACE=/home/court/clawd
RUN mkdir -p ${WORKSPACE}/memory \
${WORKSPACE}/skills \
/home/court/.openclaw \
/opt/gui/server \
/opt/skills-dist && \
chown -R court:court /home/court /opt/gui /opt/skills-dist
WORKDIR ${WORKSPACE}
# 复制初始化脚本
COPY docker/entrypoint.sh /entrypoint.sh
COPY docker/init-docker.sh /init-docker.sh
RUN chmod +x /entrypoint.sh /init-docker.sh
# 复制 GUI 构建产物
COPY --from=gui-builder /build/dist/ /opt/gui/dist/
COPY gui/server/ /opt/gui/server/
COPY gui/package.json /opt/gui/package.json
# 安装 GUI 后端依赖
RUN cd /opt/gui/server && npm ci --omit=dev --loglevel=error && \
chown -R court:court /opt/gui
# 复制 Skills只读模板
COPY skills/ /opt/skills-dist/
# 设置所有权
RUN chown -R court:court /entrypoint.sh /init-docker.sh
# 暴露端口
EXPOSE 18789 18795
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -f http://localhost:18789/health || exit 1
# 以非特权用户运行
USER court
# 复制入口脚本
COPY --chown=court:court entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# 默认命令
ENTRYPOINT ["/entrypoint.sh"]
CMD ["openclaw", "gateway", "--verbose"]