Workers / Dockerfile
github-actions[bot]
Sync from Viciy2023/openclaw@1bdc5a9cfa39a74bd93f8e1dd621f93c9f151426
af3015c
FROM ghcr.io/openclaw/openclaw:latest
USER root
ENV HOME=/root
ENV OPENCLAW_HF_APP_DIR=/opt/openclaw-hf
ENV OPENCLAW_HF_BUCKET_ENV_FILE=/data/.env
ENV OPENCLAW_HF_DATA_ROOT=/data/openclaw
ENV OPENCLAW_HF_SYNC_ENABLED=1
ENV OPENCLAW_HF_GATEWAY_PORT=18789
ENV OPENCLAW_HF_GATEWAY_BIND=lan
ENV OPENCLAW_HF_GATEWAY_EXTRA_ARGS=
ENV OPENCLAW_TEXT_TO_IMAGE_MODEL_SET=FIRST
ENV OPENCLAW_AGENT_BROWSER_CHROME_PATH=/usr/bin/chromium
ENV OPENCLAW_WECOM_PLUGIN_TARBALL=https://registry.npmjs.org/@openclaw-china/wecom/-/wecom-2026.3.29.tgz
ENV OPENCLAW_WECOM_APP_PLUGIN_TARBALL=https://registry.npmjs.org/@openclaw-china/wecom-app/-/wecom-app-2026.3.29.tgz
ENV OPENCLAW_WEIXIN_PLUGIN_TARBALL=https://registry.npmjs.org/@tencent-weixin/openclaw-weixin/-/openclaw-weixin-2.1.9.tgz
RUN node -e "const fs=require('node:fs'); const path='/app/package.json'; const pkg=JSON.parse(fs.readFileSync(path,'utf8')); if (pkg.dependencies) delete pkg.dependencies['@whiskeysockets/baileys']; if (pkg.pnpm?.onlyBuiltDependencies && Array.isArray(pkg.pnpm.onlyBuiltDependencies)) { pkg.pnpm.onlyBuiltDependencies = pkg.pnpm.onlyBuiltDependencies.filter((entry) => entry !== '@whiskeysockets/baileys'); } if (pkg.pnpm?.patchedDependencies) { delete pkg.pnpm.patchedDependencies['@whiskeysockets/baileys@7.0.0-rc.9']; if (Object.keys(pkg.pnpm.patchedDependencies).length === 0) delete pkg.pnpm.patchedDependencies; } fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + '\n');"
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
bash \
ca-certificates \
coreutils \
curl \
ffmpeg \
findutils \
git \
chromium \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libcairo-gobject2 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libdrm2 \
libfontconfig1 \
libfreetype6 \
libgbm1 \
libgdk-pixbuf-2.0-0 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
procps \
python3-pip \
rsync \
libx11-6 \
libx11-xcb1 \
libxcb-shm0 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxkbcommon0 \
libxrandr2 \
libxrender1 \
libxshmfence1 \
libxi6 \
util-linux && \
npm install -g agent-browser@latest && \
python3 -m pip install --no-cache-dir --break-system-packages tavily-python Pillow && \
rm -rf /var/lib/apt/lists/* && \
mkdir -p /root/.openclaw /data /opt/openclaw-hf /opt/openclaw-hf/prebuilt/extensions /opt/openclaw-hf/prebuilt/skills /root/.openclaw/workspace/skills
RUN bash -lc 'set -euo pipefail; \
build_root="/tmp/openclaw-plugin-build"; \
mkdir -p "${build_root}" "/opt/openclaw-hf/prebuilt/extensions"; \
fetch_and_prepare_plugin() { \
plugin_id="$1"; \
tarball_url="$2"; \
plugin_root="${build_root}/${plugin_id}"; \
archive_path="${plugin_root}.tgz"; \
mkdir -p "${plugin_root}"; \
curl -fsSL "${tarball_url}" -o "${archive_path}"; \
tar -xzf "${archive_path}" -C "${plugin_root}"; \
if [ ! -d "${plugin_root}/package" ]; then \
echo "plugin archive missing package/ root: ${plugin_id}" >&2; \
exit 1; \
fi; \
npm install --omit=dev --prefix "${plugin_root}/package"; \
cp -a "${plugin_root}/package" "/opt/openclaw-hf/prebuilt/extensions/${plugin_id}"; \
}; \
fetch_and_prepare_plugin wecom "${OPENCLAW_WECOM_PLUGIN_TARBALL}"; \
fetch_and_prepare_plugin wecom-app "${OPENCLAW_WECOM_APP_PLUGIN_TARBALL}"; \
fetch_and_prepare_plugin openclaw-weixin "${OPENCLAW_WEIXIN_PLUGIN_TARBALL}"; \
rm -rf "${build_root}"'
RUN cd /root/.openclaw/workspace && \
npx -y clawhub@latest install ddg-web-search --force && \
npx -y clawhub@latest install n2-free-search --force && \
cp -a /root/.openclaw/workspace/skills/ddg-web-search /opt/openclaw-hf/prebuilt/skills/ddg-web-search && \
cp -a /root/.openclaw/workspace/skills/n2-free-search /opt/openclaw-hf/prebuilt/skills/n2-free-search
COPY lib/common.sh /opt/openclaw-hf/lib/common.sh
COPY cron/jobs.json /opt/openclaw-hf/cron/jobs.json
COPY install-extra.sh /opt/openclaw-hf/install-extra.sh
COPY syncd.sh /opt/openclaw-hf/syncd.sh
COPY hf-sync.sh /opt/openclaw-hf/hf-sync.sh
COPY qwen-image-bridge.py /opt/openclaw-hf/qwen-image-bridge.py
COPY weixin-image-normalizer.py /opt/openclaw-hf/weixin-image-normalizer.py
COPY wechat-gzh-draft-bridge.py /opt/openclaw-hf/wechat-gzh-draft-bridge.py
COPY start-hf.sh /opt/openclaw-hf/start-hf.sh
RUN chmod 755 /opt/openclaw-hf/install-extra.sh /opt/openclaw-hf/syncd.sh /opt/openclaw-hf/hf-sync.sh /opt/openclaw-hf/qwen-image-bridge.py /opt/openclaw-hf/weixin-image-normalizer.py /opt/openclaw-hf/wechat-gzh-draft-bridge.py /opt/openclaw-hf/start-hf.sh && \
chmod 644 /opt/openclaw-hf/lib/common.sh
WORKDIR /root
ENTRYPOINT ["/opt/openclaw-hf/start-hf.sh"]