echo8900 commited on
Commit
abf6e02
·
verified ·
1 Parent(s): 058c130

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +48 -42
Dockerfile CHANGED
@@ -2,58 +2,64 @@ FROM ghcr.io/openclaw/openclaw:latest
2
 
3
  USER root
4
 
5
- # 基础文件复制
6
  COPY openclaw.json /app/openclaw-template.json
7
  COPY setup-hf-config.mjs /app/spaces/huggingface/setup-hf-config.mjs
8
  COPY entrypoint.sh /app/entrypoint.sh
9
  COPY security-check.sh /app/security-check.sh
10
  COPY diagnose.sh /app/diagnose.sh
11
 
12
- # 修复 meta.lastTouchedAt 导致频繁重启的问题
13
- RUN node -e "
14
- const fs = require('fs');
15
- const { execSync } = require('child_process');
16
- function findBundles() {
17
- try {
18
- const out = execSync('find /app -name \"gateway-cli*.js\" -not -path \"*/node_modules/*\" 2>/dev/null').toString().trim();
19
- return out ? out.split('\n').filter(Boolean) : [];
20
- } catch(e) { return []; }
21
- }
22
- const bundles = findBundles();
23
- if (bundles.length === 0) { console.log('[patch] No bundle found - skipping'); process.exit(0); }
24
- let patched = 0;
25
- bundles.forEach(function(file) {
26
- let src = fs.readFileSync(file, 'utf-8');
27
- if (src.includes('prefix:\"meta\"') || src.includes(\"prefix:'meta'\")) {
28
- console.log('[patch] Already patched: ' + file); return;
29
- }
30
- const patterns = [
31
- ['{prefix:\"channels\",kind:', '{prefix:\"meta\",kind:\"none\"},{prefix:\"channels\",kind:'],
32
- ['{prefix:\"update\",kind:', '{prefix:\"meta\",kind:\"none\"},{prefix:\"update\",kind:'],
33
- ['{prefix:\"agents\",kind:', '{prefix:\"meta\",kind:\"none\"},{prefix:\"agents\",kind:']
34
- ];
35
- let applied = false;
36
- for (let i = 0; i < patterns.length; i++) {
37
- if (src.includes(patterns[i][0])) {
38
- src = src.replace(patterns[i][0], patterns[i][1]);
39
- applied = true; break;
40
- }
41
- }
42
- if (applied) {
43
- fs.writeFileSync(file, src, 'utf-8');
44
- console.log('[patch] Patched: ' + file);
45
- patched++;
46
- } else {
47
- console.log('[patch] Pattern not found: ' + file);
48
- }
49
- });
50
- console.log('[patch] Done. Patched: ' + patched + '/' + bundles.length);
 
 
51
  " || echo "[patch] Non-fatal: patch step failed"
52
 
53
- RUN chmod +x /app/entrypoint.sh /app/security-check.sh /app/diagnose.sh && \
 
54
  mkdir -p /home/user && \
55
  chown -R node:node /home/user && \
56
- chown node:node /app/entrypoint.sh /app/security-check.sh /app/diagnose.sh /app/openclaw-template.json /app/spaces/huggingface/setup-hf-config.mjs
 
 
 
57
 
58
  USER node
59
 
 
2
 
3
  USER root
4
 
5
+ # Copy Space repo files into container
6
  COPY openclaw.json /app/openclaw-template.json
7
  COPY setup-hf-config.mjs /app/spaces/huggingface/setup-hf-config.mjs
8
  COPY entrypoint.sh /app/entrypoint.sh
9
  COPY security-check.sh /app/security-check.sh
10
  COPY diagnose.sh /app/diagnose.sh
11
 
12
+ # PATCH: fix meta.lastTouchedAt triggering unnecessary gateway restarts
13
+ # Issue: https://github.com/openclaw/openclaw/issues/11744
14
+ # meta.lastTouchedAt is updated on every config write, but it is not in
15
+ # BASE_RELOAD_RULES, so every config save triggers a full gateway restart.
16
+ # Fix: inject {prefix:"meta",kind:"none"} into BASE_RELOAD_RULES.
17
+ RUN node -e " \
18
+ const fs = require('fs'); \
19
+ const { execSync } = require('child_process'); \
20
+ function findBundles() { \
21
+ try { \
22
+ const out = execSync('find /app -name \"gateway-cli*.js\" -not -path \"*/node_modules/*\" 2>/dev/null').toString().trim(); \
23
+ return out ? out.split('\n').filter(Boolean) : []; \
24
+ } catch(e) { return []; } \
25
+ } \
26
+ const bundles = findBundles(); \
27
+ if (bundles.length === 0) { console.log('[patch] No bundle found - skipping'); process.exit(0); } \
28
+
29
+ let patched = 0; \
30
+ bundles.forEach(function(file) { \
31
+ let src = fs.readFileSync(file, 'utf-8'); \
32
+ if (src.includes('prefix:\"meta\"') || src.includes(\"prefix:'meta'\")) { \
33
+ console.log('[patch] Already patched: ' + file); return; \
34
+ } \
35
+ const patterns = [ \
36
+ ['{prefix:\"channels\",kind:', '{prefix:\"meta\",kind:\"none\"},{prefix:\"channels\",kind:'], \
37
+ ['{prefix:\"update\",kind:', '{prefix:\"meta\",kind:\"none\"},{prefix:\"update\",kind:'], \
38
+ ['{prefix:\"agents\",kind:', '{prefix:\"meta\",kind:\"none\"},{prefix:\"agents\",kind:'] \
39
+ ]; \
40
+ let applied = false; \
41
+ for (let i = 0; i < patterns.length; i++) { \
42
+ if (src.includes(patterns[i][0])) { \
43
+ src = src.replace(patterns[i][0], patterns[i][1]); \
44
+ applied = true; break; \
45
+ } \
46
+ } \
47
+ if (applied) { fs.writeFileSync(file, src, 'utf-8'); \
48
+ console.log('[patch] Patched: ' + file); patched++; } \
49
+ else { console.log('[patch] Pattern not found: ' + file); \
50
+ } \
51
+ }); \
52
+ console.log('[patch] Done. Patched: ' + patched + '/' + bundles.length); \
53
  " || echo "[patch] Non-fatal: patch step failed"
54
 
55
+ RUN chmod +x /app/entrypoint.sh \
56
+ /app/security-check.sh && \
57
  mkdir -p /home/user && \
58
  chown -R node:node /home/user && \
59
+ chown node:node /app/entrypoint.sh \
60
+ /app/security-check.sh \
61
+ /app/openclaw-template.json \
62
+ /app/spaces/huggingface/setup-hf-config.mjs
63
 
64
  USER node
65