kyle-ai commited on
Commit
99f40b4
·
verified ·
1 Parent(s): 5e82850

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +28 -12
Dockerfile CHANGED
@@ -65,19 +65,21 @@ if __name__ == "__main__":\n\
65
  if len(sys.argv) > 1 and sys.argv[1] == "backup": backup()\n\
66
  else: restore()' > /usr/local/bin/sync.py
67
 
68
- # 6. 最终启动脚本 (保留原有的配置还原与写入,仅优化进程守护)
69
  RUN echo "#!/bin/bash\n\
70
- set -e\n\
71
  mkdir -p /root/.openclaw\n\
72
  ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime\n\
73
  \n\
 
74
  python3 /usr/local/bin/sync.py restore\n\
75
  find /root/.openclaw -name \"*.lock\" -delete\n\
76
  chmod 700 /root/.openclaw\n\
77
  \n\
78
- CLEAN_BASE=\$(echo \"\$OPENAI_API_BASE\" | sed \"s|/chat/completions||g\" | sed \"s|/v1/|/v1|g\")\n\
79
- \n\
80
- cat > /root/.openclaw/openclaw.json <<EOF\n\
 
 
81
  {\n\
82
  \"models\": { \"providers\": { \"siliconflow\": { \"baseUrl\": \"\$CLEAN_BASE\", \"apiKey\": \"\$OPENAI_API_KEY\", \"api\": \"openai-completions\", \"authHeader\": true, \"models\": [{ \"id\": \"\$MODEL\", \"name\": \"DeepSeek\", \"contextWindow\": 128000 }] } } },\n\
83
  \"agents\": { \"defaults\": { \"model\": { \"primary\": \"siliconflow/\$MODEL\" } } },\n\
@@ -90,28 +92,42 @@ cat > /root/.openclaw/openclaw.json <<EOF\n\
90
  }\n\
91
  }\n\
92
  EOF\n\
 
 
 
93
  \n\
 
94
  (while true; do sleep 1800; python3 /usr/local/bin/sync.py backup; done) &\n\
95
  \n\
96
- echo \"--- [System] 🚀 正在启动 OpenClaw Gateway... ---\"\n\
97
  export NODE_ENV=production\n\
98
  export OPENCLAW_TRUST_PROXY=true\n\
99
  \n\
100
- # 关键修复1:关闭 set -e,防止 openclaw 退出时把整个 bash 脚本带崩\n\
101
  set +e\n\
102
- \n\
103
- # 关键修复2:将关闭信号(SIGTERM)正确传递给 openclaw,配合 HF 的生命周期管理\n\
104
  trap 'kill -TERM \$PID 2>/dev/null' TERM INT\n\
105
  \n\
106
- # 关键修复3:使用 后台进程(&) + wait 模式,这是 Docker 中 bash 作为 PID 1 最稳定的循环方式\n\
107
  while true; do\n\
 
 
 
 
 
108
  openclaw gateway run --port 7860 &\n\
109
  PID=\$!\n\
110
  wait \$PID\n\
111
- echo \"--- [System] ⚠️ OpenClaw 进程退出,等待 3 秒后内部重启... ---\"\n\
 
 
 
 
 
 
 
 
 
 
112
  sleep 3\n\
113
  done\n\
114
  " > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
115
-
116
  EXPOSE 7860
117
  CMD ["/usr/local/bin/start-openclaw"]
 
65
  if len(sys.argv) > 1 and sys.argv[1] == "backup": backup()\n\
66
  else: restore()' > /usr/local/bin/sync.py
67
 
68
+ # 6. 最终启动脚本 (增加进程清理与锁文件强制删除)
69
  RUN echo "#!/bin/bash\n\
 
70
  mkdir -p /root/.openclaw\n\
71
  ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime\n\
72
  \n\
73
+ # 1. 尝试从云端恢复配置\n\
74
  python3 /usr/local/bin/sync.py restore\n\
75
  find /root/.openclaw -name \"*.lock\" -delete\n\
76
  chmod 700 /root/.openclaw\n\
77
  \n\
78
+ # 2. 判断配置文件是否存在,如果不存在(首次运行或恢复失败)才使用环境变量生成\n\
79
+ if [ ! -f /root/.openclaw/openclaw.json ]; then\n\
80
+ echo \"--- [System] 📝 未检测到配置文件,正在使用环境变量初始化... ---\"\n\
81
+ CLEAN_BASE=\$(echo \"\$OPENAI_API_BASE\" | sed \"s|/chat/completions||g\" | sed \"s|/v1/|/v1|g\")\n\
82
+ cat > /root/.openclaw/openclaw.json <<EOF\n\
83
  {\n\
84
  \"models\": { \"providers\": { \"siliconflow\": { \"baseUrl\": \"\$CLEAN_BASE\", \"apiKey\": \"\$OPENAI_API_KEY\", \"api\": \"openai-completions\", \"authHeader\": true, \"models\": [{ \"id\": \"\$MODEL\", \"name\": \"DeepSeek\", \"contextWindow\": 128000 }] } } },\n\
85
  \"agents\": { \"defaults\": { \"model\": { \"primary\": \"siliconflow/\$MODEL\" } } },\n\
 
92
  }\n\
93
  }\n\
94
  EOF\n\
95
+ else\n\
96
+ echo \"--- [System] 📂 检测到已有配置文件,跳过初始化。 ---\"\n\
97
+ fi\n\
98
  \n\
99
+ # 3. 启动后台备份任务\n\
100
  (while true; do sleep 1800; python3 /usr/local/bin/sync.py backup; done) &\n\
101
  \n\
 
102
  export NODE_ENV=production\n\
103
  export OPENCLAW_TRUST_PROXY=true\n\
104
  \n\
105
+ # 4. 守护进程模式运行 openclaw\n\
106
  set +e\n\
 
 
107
  trap 'kill -TERM \$PID 2>/dev/null' TERM INT\n\
108
  \n\
 
109
  while true; do\n\
110
+ echo \"--- [System] 🚀 正在启动/重启 OpenClaw Gateway... ---\"\n\
111
+ \n\
112
+ # 每次启动前,确保没有任何旧进程和锁文件残留\n\
113
+ find /root/.openclaw -name \"*.lock\" -delete\n\
114
+ \n\
115
  openclaw gateway run --port 7860 &\n\
116
  PID=\$!\n\
117
  wait \$PID\n\
118
+ \n\
119
+ echo \"--- [System] ⚠️ OpenClaw 主进程退出,正在进行清理与内部重启... ---\"\n\
120
+ \n\
121
+ # 关键修复:执行官方的停止命令,并强杀可能残留的 node 幽灵进程\n\
122
+ openclaw gateway stop || true\n\
123
+ pkill -f openclaw || true\n\
124
+ pkill -f node || true\n\
125
+ \n\
126
+ # 强制进行一次备份\n\
127
+ python3 /usr/local/bin/sync.py backup || true\n\
128
+ \n\
129
  sleep 3\n\
130
  done\n\
131
  " > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
 
132
  EXPOSE 7860
133
  CMD ["/usr/local/bin/start-openclaw"]