@@ -25,15 +25,15 @@ RUN groupadd -r user && useradd -r -g user -m -s /bin/bash user
2525
2626# 创建目录并设置权限
2727RUN mkdir -p /data /data/user /app /home/user/.claude/skills /home/user/.openclaw /home/user/db && \
28- chown -R user:user /data /app /home/user && \
29- chmod 755 /data /app /home/user && \
30- chmod 775 /home/user/db /home/user/.claude /home/user/.claude/skills && \
31- chmod -R 755 /home/user/.openclaw
28+ chown -R user:user /data /app /home/user && \
29+ chmod 755 /data /app /home/user && \
30+ chmod 775 /home/user/db /home/user/.claude /home/user/.claude/skills && \
31+ chmod -R 755 /home/user/.openclaw
3232
3333
3434# 安装 Python 依赖
3535WORKDIR /app
36- COPY requirements.txt ./
36+ COPY --chown=user:user requirements.txt ./
3737RUN pip install --no-cache-dir -r requirements.txt
3838
3939# 复制代码
@@ -44,48 +44,42 @@ COPY --chown=user:user skills/ /app/.skills-backup/
4444
4545ENV HOME=/home/user
4646
47+ # 安装插件
48+ RUN openclaw plugins install @openclaw-china/channels
49+
50+ # 把插件数据备份到不会被挂载覆盖的目录
51+ RUN mkdir -p /app/.openclaw-extensions-backup && \
52+ cp -r /home/user/.openclaw/extensions /app/.openclaw-extensions-backup/
53+
4754EXPOSE 8000 18789
4855
4956# 启动时尝试修复挂载目录权限(bind mount 场景可能无效),然后降权运行主命令
5057ENTRYPOINT ["sh" , "-lc" , "\
51- set -e && \
52- echo 'BOOT: entrypoint start' && \
53- mkdir -p /home/user/.openclaw && \
54- chmod -R 755 /home/user/.openclaw 2>/dev/null || true && \
55- chown -R user:user /home/user/.openclaw 2>/dev/null || true && \
56- exec su -s /bin/sh -c \" $*\" user --\
57- " , "--" ]
58+ set -e && \
59+ echo 'BOOT: entrypoint start' && \
60+ mkdir -p /home/user/.openclaw && \
61+ chmod -R 755 /home/user/.openclaw 2>/dev/null || true && \
62+ chown -R user:user /home/user/.openclaw 2>/dev/null || true && \
63+ exec su -s /bin/sh -c \" $*\" user --\
64+ " , "--" ]
5865
5966# 启动时检查 channels 插件是否存在,不存在才恢复
6067USER root
6168CMD ["sh" , "-c" , "\
62- set -e && \
63- echo 'BOOT: cmd start' && \
64- OPENCLAW_CFG=\" /home/user/.openclaw/openclaw.json\" && \
65- OPENCLAW_CFG_BAK=\" /home/user/.openclaw/openclaw.json.back302ai\" && \
66- CHANNELS_DIR=\" /home/user/.openclaw/extensions/channels\" && \
67- if [ -d \" $CHANNELS_DIR\" ]; then \
68- echo 'channels plugin exists, skipping install'; \
69- else \
70- if [ -f \" $OPENCLAW_CFG\" ]; then \
71- mkdir -p /home/user/.openclaw && \
72- rm -f \" $OPENCLAW_CFG_BAK\" && \
73- mv \" $OPENCLAW_CFG\" \" $OPENCLAW_CFG_BAK\" && \
74- echo 'Temporarily moved openclaw.json to .back302ai for plugin install'; \
75- fi && \
76- openclaw plugins install @openclaw-china/channels && \
77- echo 'Installed openclaw channels plugin' && \
78- if [ -f \" $OPENCLAW_CFG_BAK\" ]; then \
79- mv -f \" $OPENCLAW_CFG_BAK\" \" $OPENCLAW_CFG\" && \
80- echo 'Restored openclaw.json'; \
81- fi; \
82- fi && \
83- mkdir -p /home/user/.claude/skills && \
84- for p in /app/.skills-backup/*; do \
85- name=\" $(basename \" $p\" )\" ; \
86- cp -a \" $p\" /home/user/.claude/skills/ 2>/dev/null || true; \
87- echo \" Restored skill entry (overwrite): $name\" ; \
88- done && \
89- openclaw gateway run --port 18789 --bind lan & \
90- uvicorn main:app --host 0.0.0.0 --port 8000\
91- " ]
69+ if [ ! -d \" /home/user/.openclaw/extensions/channels\" ]; then \
70+ mkdir -p /home/user/.openclaw/extensions && \
71+ cp -r /app/.openclaw-extensions-backup/extensions/* /home/user/.openclaw/extensions/ 2>/dev/null || true; \
72+ echo 'Restored openclaw extensions (channels plugin was missing)'; \
73+ else \
74+ echo 'channels plugin exists, skipping restore'; \
75+ fi && \
76+ mkdir -p /home/user/.claude/skills && \
77+ for p in /app/.skills-backup/*; do \
78+ name=\" $(basename \" $p\" )\" ; \
79+ cp -r \" $p\" /home/user/.claude/skills/ 2>/dev/null || true; \
80+ echo \" Restored skill entry (overwrite): $name\" ; \
81+ done && \
82+ chmod -R 755 /home/user/ && chmod -R 755 /app && chown -R user:user /home/user && \
83+ su - user -c 'cd /app && openclaw gateway run --port 18789 --bind lan & \
84+ uvicorn main:app --host 0.0.0.0 --port 8000' \
85+ " ]
0 commit comments