1414# Slim (bookworm-slim): docker build --build-arg OPENCLAW_VARIANT=slim .
1515ARG OPENCLAW_EXTENSIONS=""
1616ARG OPENCLAW_VARIANT=default
17+ ARG OPENCLAW_CADDY_IMAGE="caddy:2"
1718ARG OPENCLAW_NODE_BOOKWORM_IMAGE="node:24-bookworm@sha256:3a09aa6354567619221ef6c45a5051b671f953f0a1924d1f819ffb236e520e6b"
1819ARG OPENCLAW_NODE_BOOKWORM_DIGEST="sha256:3a09aa6354567619221ef6c45a5051b671f953f0a1924d1f819ffb236e520e6b"
1920ARG OPENCLAW_NODE_BOOKWORM_SLIM_IMAGE="node:24-bookworm-slim@sha256:e8e2e91b1378f83c5b2dd15f0247f34110e2fe895f6ca7719dbb780f929368eb"
@@ -36,6 +37,8 @@ RUN mkdir -p /out && \
3637 fi; \
3738 done
3839
40+ FROM ${OPENCLAW_CADDY_IMAGE} AS caddy-binary
41+
3942FROM ${OPENCLAW_NODE_BOOKWORM_IMAGE} AS build
4043
4144# Install Bun (required for build scripts). Retry the whole bootstrap flow to
@@ -142,6 +145,9 @@ COPY --from=runtime-assets --chown=node:node /app/openclaw.mjs .
142145COPY --from=runtime-assets --chown=node:node /app/extensions ./extensions
143146COPY --from=runtime-assets --chown=node:node /app/skills ./skills
144147COPY --from=runtime-assets --chown=node:node /app/docs ./docs
148+ COPY --from=caddy-binary /usr/bin/caddy /usr/bin/caddy
149+ COPY openclaw/Caddyfile /etc/caddy/Caddyfile
150+ COPY openclaw/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
145151
146152# Keep pnpm available in the runtime image for container-local workflows.
147153# Use a shared Corepack home so the non-root `node` user does not need a
@@ -225,9 +231,13 @@ RUN printf '%s\n' \
225231 'set -e' \
226232 'exec node /app/openclaw.mjs "$@"' \
227233 > /usr/local/bin/openclaw && \
228- chmod 755 /usr/local/bin/openclaw /app/openclaw.mjs
234+ install -d -o node -g node /data /config /etc/caddy /tmp/caddy && \
235+ chmod 755 /usr/local/bin/openclaw /usr/local/bin/docker-entrypoint.sh /usr/bin/caddy /app/openclaw.mjs && \
236+ chown -R node:node /data /config /etc/caddy /tmp/caddy
229237# -----------------------------
230238
239+ ENV CADDY_HTTPS_PORT=8443
240+ ENV CADDY_SITE_ADDRESS=127.0.0.1
231241ENV NODE_ENV=production
232242
233243# Security hardening: Run as non-root user
@@ -250,4 +260,6 @@ USER node
250260HEALTHCHECK --interval=3m --timeout=10s --start-period=15s --retries=3 \
251261 CMD node -e "fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
252262
263+ EXPOSE 8443
264+ ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh" ]
253265CMD ["openclaw" , "gateway" , "--allow-unconfigured" ]
0 commit comments