# 核心镜像:Node 22 slim FROM node:22-slim # 1. 安装系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ git openssh-client build-essential \ g++ make ca-certificates socat \ chromium fonts-noto-cjk python3 \ && rm -rf /var/lib/apt/lists/* # 2. 构建环境优化 RUN update-ca-certificates && \ git config --global http.sslVerify false && \ git config --global url."https://github.com/".insteadOf ssh://git@github.com/ # 3. 全局安装 OpenClaw 最新版 RUN npm install -g openclaw@latest --unsafe-perm # 4. 环境与权限设置 ENV PORT=7860 \ HOME=/home/node RUN mkdir -p /home/node/.openclaw/sessions \ && mkdir -p /home/node/.openclaw/workspace \ && mkdir -p /home/node/data \ && chown -R node:node /home/node # 5. 容器入口脚本 RUN echo "#!/bin/bash\n\ set -e\n\ \n\ if [ -n \"\$HF_TOKEN\" ] && [ -n \"\$DATASET_REPO\" ]; then\n\ echo \"🚀 初始化 Git 自动备份...\"\n\ git config --global user.email \"openclaw-bot@huggingface.co\"\n\ git config --global user.name \"OpenClaw Bot\"\n\ cd /home/node/data\n\ if [ ! -d \".git\" ]; then\n\ echo \"📥 克隆数据集: \$DATASET_REPO\"\n\ git clone https://user:\$HF_TOKEN@huggingface.co/datasets/\$DATASET_REPO .\n\ else\n\ echo \"📥 拉取最新数据...\"\n\ git pull origin main\n\ fi\n\ if [ \"\$(ls -A /home/node/data)\" ]; then\n\ echo \"♻️ 正在恢复历史数据...\"\n\ cp -r /home/node/data/* /home/node/.openclaw/ 2>/dev/null || true\n\ fi\n\ fi\n\ \n\ # 👇 核心防坑:每次启动前,清理上次浏览器崩溃留下的死锁文件!\n\ echo \"🧹 正在清理可能残留的浏览器死锁文件...\"\n\ find /home/node/.openclaw -name SingletonLock -delete 2>/dev/null || true\n\ \n\ CLEAN_BASE=\$(echo \"\$OPENAI_API_BASE\" | sed \"s|/chat/completions||g\" | sed \"s|/v1/|/v1|g\" | sed \"s|/v1\$|/v1|g\")\n\ \n\ echo \"⚙️ 正在生成 OpenClaw 配置文件...\"\n\ cat > /home/node/.openclaw/openclaw.json </dev/null || true;\n\ cp -r /home/node/.openclaw/workspace /home/node/data/ 2>/dev/null || true;\n\ rm -rf /home/node/data/workspace/.git 2>/dev/null || true;\n\ cd /home/node/data;\n\ if [[ \$(git status --porcelain) ]]; then\n\ echo \"💾 [自动同步] 发现数据变动,正在上传...\"\n\ git add .;\n\ git commit -m \"Auto sync: \$(date)\";\n\ git push https://user:\$HF_TOKEN@huggingface.co/datasets/\$DATASET_REPO main > /dev/null 2>&1;\n\ fi;\n\ done) &\n\ fi\n\ \n\ cd /home/node/.openclaw\n\ echo \"🔌 启动端口转发引擎...\"\n\ socat TCP4-LISTEN:7860,fork,reuseaddr TCP4:127.0.0.1:25808 &\n\ \n\ echo \"🚀 启动 OpenClaw Gateway...\"\n\ exec openclaw gateway run --port 25808 --allow-unconfigured\n\ " > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw # 6. 切换到普通用户运行 USER node WORKDIR /home/node EXPOSE 7860 CMD ["/usr/local/bin/start-openclaw"]