2026-01-02 13:52:08 +02:00
|
|
|
FROM node:22-bookworm
|
|
|
|
|
|
2026-01-06 15:05:19 +01:00
|
|
|
# Install Bun (required for build scripts)
|
|
|
|
|
RUN curl -fsSL https://bun.sh/install | bash
|
|
|
|
|
ENV PATH="/root/.bun/bin:${PATH}"
|
|
|
|
|
|
2026-01-02 13:52:08 +02:00
|
|
|
RUN corepack enable
|
|
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
ARG OPENCLAW_DOCKER_APT_PACKAGES=""
|
|
|
|
|
RUN if [ -n "$OPENCLAW_DOCKER_APT_PACKAGES" ]; then \
|
2026-01-11 00:06:19 +00:00
|
|
|
apt-get update && \
|
2026-01-30 03:15:10 +01:00
|
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends $OPENCLAW_DOCKER_APT_PACKAGES && \
|
2026-01-11 03:27:48 +01:00
|
|
|
apt-get clean && \
|
|
|
|
|
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*; \
|
2026-01-11 00:06:19 +00:00
|
|
|
fi
|
|
|
|
|
|
2026-01-09 15:23:06 -05:00
|
|
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
|
|
|
|
|
COPY ui/package.json ./ui/package.json
|
|
|
|
|
COPY patches ./patches
|
|
|
|
|
COPY scripts ./scripts
|
2026-01-02 13:52:08 +02:00
|
|
|
|
|
|
|
|
RUN pnpm install --frozen-lockfile
|
2026-01-09 15:23:06 -05:00
|
|
|
|
|
|
|
|
COPY . .
|
2026-02-09 22:44:59 -06:00
|
|
|
RUN pnpm build
|
2026-02-16 10:21:51 -08:00
|
|
|
|
|
|
|
|
# Ensure memory-lancedb extension dependencies are installed.
|
|
|
|
|
# LanceDB has native bindings that may not be hoisted by pnpm in all configurations.
|
|
|
|
|
RUN pnpm install --filter @openclaw/memory-lancedb --prod --no-frozen-lockfile 2>/dev/null || true
|
2026-01-16 11:03:56 +01:00
|
|
|
# Force pnpm for UI build (Bun may fail on ARM/Synology architectures)
|
2026-01-30 03:15:10 +01:00
|
|
|
ENV OPENCLAW_PREFER_PNPM=1
|
2026-01-02 13:52:08 +02:00
|
|
|
RUN pnpm ui:build
|
|
|
|
|
|
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
|
|
2026-02-02 08:50:34 +00:00
|
|
|
# Allow non-root user to write temp files during runtime/tests.
|
|
|
|
|
RUN chown -R node:node /app
|
|
|
|
|
|
2026-01-25 20:41:20 -03:00
|
|
|
# Security hardening: Run as non-root user
|
|
|
|
|
# The node:22-bookworm image includes a 'node' user (uid 1000)
|
|
|
|
|
# This reduces the attack surface by preventing container escape via root privileges
|
|
|
|
|
USER node
|
|
|
|
|
|
2026-02-02 03:46:30 +05:30
|
|
|
# Start gateway server with default config.
|
|
|
|
|
# Binds to loopback (127.0.0.1) by default for security.
|
|
|
|
|
#
|
|
|
|
|
# For container platforms requiring external health checks:
|
|
|
|
|
# 1. Set OPENCLAW_GATEWAY_TOKEN or OPENCLAW_GATEWAY_PASSWORD env var
|
2026-02-06 17:18:10 -08:00
|
|
|
# 2. Override CMD: ["node","openclaw.mjs","gateway","--allow-unconfigured","--bind","lan"]
|
|
|
|
|
CMD ["node", "openclaw.mjs", "gateway", "--allow-unconfigured"]
|