docker-architect — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited docker-architect (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Targets Docker Engine 29, Compose v2, BuildKit (default). Commands use docker compose (v2 plugin, no hyphen). File names use docker-compose.yaml. Per-language Dockerfiles and BuildKit/multi-arch/Trivy commands in RECIPES.md; pinned tool versions in STACK.md.
.git/, node_modules/, .venv/, build outputs, secrets, IDE files. Bad .dockerignore is the most common cause of bloated images and accidentally-leaked secrets.:nonroot tag handles this; for Debian-based, useradd -u 10001 -r app && USER 10001./healthz, pg_isready, etc.). Compose depends_on conditions depend on healthchecks being correct.RUN apt-get update && apt-get install -y --no-install-recommends X && rm -rf /var/lib/apt/lists/*.Per-language defaults:
| Language | Default base | Why |
|---|---|---|
| Go | gcr.io/distroless/static-debian12:nonroot | Static binary, ~2 MB image, non-root by default, no shell (smaller attack surface). Reach for scratch only after auditing CA certs + tzdata yourself. |
| Python | python:3.14-slim (debian slim) | uv in a builder stage, copy .venv to runtime. Avoid alpine — musl breaks several scientific wheels. |
| Node | node:22-slim (debian slim) | Alpine breaks too many native modules. LTS only in production. |
Always pin by digest in production: FROM python:3.14-slim@sha256:abc.... Tags are mutable; digests aren't. Refresh digests via Renovate / Dependabot.
BuildKit is the default builder in Docker 29 — use cache mounts (survive layer invalidation), secret mounts (never COPY secrets into layers), bind mounts (read source without COPY), and here-docs (multi-line scripts) deliberately. Snippets in RECIPES.md.
--mount=type=secret. Runtime secrets come from the orchestrator (env, mounted file, secrets manager).--cap-drop=ALL --cap-add=NET_BIND_SERVICE).--read-only + tmpfs for /tmp).--init / tini).Always build linux/amd64 + linux/arm64. Cloud is largely arm64-friendly now (Graviton, Ampere); local dev on Apple Silicon is arm64-native. docker buildx build --platform linux/amd64,linux/arm64 ... — full command + cache options in RECIPES.md.
docker-compose.yaml (long extension), with docker-compose.override.yaml for dev-only additions. Compose auto-merges them.docker compose up (v2 plugin, integrated). The legacy docker-compose standalone binary is deprecated — don't use it. services:
app:
depends_on:
db:
condition: service_healthyThis requires db to define a working healthcheck. depends_on without condition: only orders startup — doesn't wait for readiness.
db-data:), bind mounts only for source-code hot-reload in dev.secrets: and configs: top-level blocks for production-shaped local runs.deploy.resources.limits.memory, cpus). Unbounded containers eat hosts.json-file with size + count rotation, or journald on Linux hosts. Production typically forwards to a log aggregator.unless-stopped for long-running services; no for batch jobs.--init (or init: true in Compose) when the app spawns child processes — prevents zombie processes.TZ=Etc/UTC explicitly in the image; never rely on host timezone.docker-compose.yaml — production-shaped baseline (images by digest, no source bind mounts, prod env defaults).docker-compose.override.yaml — dev-only additions: bind-mount source for hot reload, expose ports for debuggers, pull secrets from .env.local.docker compose up. To run prod-only, use docker compose -f docker-compose.yaml up (skip the override)../ into prod ships.@sha256:...), not tags. Tags are for humans; digests are for machines.1.2.3) plus a moving latest and 1.2 major/minor aliases for local convenience.trivy image --severity HIGH,CRITICAL --exit-code 1 ...) — full command in RECIPES.md..trivyignore) for documented, accepted exceptions — never silent allowlists.trivy image --format spdx-json --output sbom.json ... — attach to releases. Required for supply-chain compliance.Reference Dockerfiles for Go (distroless), Python (uv, debian slim), and Node (debian slim) live in RECIPES.md.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.