From da326b265de185e88a61d14a6b1fb527eb79756f Mon Sep 17 00:00:00 2001 From: Alex Gorevski Date: Tue, 17 Feb 2026 10:06:35 -0800 Subject: [PATCH] =?UTF-8?q?fix(container):=20address=20all=20container=20a?= =?UTF-8?q?nti-patterns=20(4.1=E2=80=934.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace broad COPY . . with targeted COPY src/ and firmware/ to preserve Docker layer cache across non-build file changes (4.1) - Inline permissions/config prep into builder stage, removing the extra busybox stage and its maintenance/security overhead (4.2) - Strip heavy dev tools (vim, git, iputils-ping, openssl) from dev image, keeping only ca-certificates and curl (4.3) - Replace expensive zeroclaw doctor healthcheck with lightweight zeroclaw status; increase interval from 30s to 60s (4.4) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- Dockerfile | 33 ++++++++++++--------------------- docker-compose.yml | 7 ++++--- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3b473b9..b571799 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,8 +24,9 @@ RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/regist cargo build --release --locked RUN rm -rf src benches -# 2. Copy source code -COPY . . +# 2. Copy only build-relevant source paths (avoid cache-busting on docs/tests/scripts) +COPY src/ src/ +COPY firmware/ firmware/ RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ --mount=type=cache,id=zeroclaw-cargo-git,target=/usr/local/cargo/git,sharing=locked \ --mount=type=cache,id=zeroclaw-target,target=/app/target,sharing=locked \ @@ -33,14 +34,10 @@ RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/regist cp target/release/zeroclaw /app/zeroclaw && \ strip /app/zeroclaw -# ── Stage 2: Permissions & Config Prep ─────────────────────── -FROM busybox:1.37@sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98cf30e97e87e4207dd76f AS permissions -# Create directory structure (simplified workspace path) -RUN mkdir -p /zeroclaw-data/.zeroclaw /zeroclaw-data/workspace - -# Create minimal config for PRODUCTION (allows binding to public interfaces) -# NOTE: Provider configuration must be done via environment variables at runtime -RUN cat > /zeroclaw-data/.zeroclaw/config.toml < /zeroclaw-data/.zeroclaw/config.toml <