catalog / docker.io/library/rabbitmq / criteria

rabbitmq — validation criteria

Per-image acceptance criteria for the docker.io/library/rabbitmq profile (the official RabbitMQ image, plain — not -management). Validated against …@sha256:345dd3c1… (tag 4.3), derived by drop-test against the default (root-then-drop) invocation. The default runs on the full Docker default cap set; this profile trims it 14 → 2.

Representative workload / correctness check

profiles/workloads/rabbitmq.sh — a real declare → publish → consume round-trip. The plain image ships no AMQP client and no curl (only rabbitmqctl / rabbitmq-diagnostics), so the workload enables the bundled rabbitmq_management plugin at runtime — the same plugin the -management tag pre-enables and most deployments run — and drives the round-trip over the management API from a sidecar sharing the target's network namespace, which also satisfies the default guest user's loopback-only restriction with no config changes. The drop-test correctness check additionally asserts the broker (beam.smp) runs as the non-root rabbitmq user (uid 999).

Two harness sharp edges, reproduced deterministically on 4.3 — any re-derivation must respect both:

  1. Never exec a rabbitmq CLI into the container during boot. An exec'd root-run Erlang client races the entrypoint for the creation of /var/lib/rabbitmq/.erlang.cookie; if root wins, the broker (running as rabbitmq) cannot read its own cookie and beam crashes (erl_crash.dump). Gate on the broker's own "Server startup complete" log line first.
  2. Exec CLIs as the rabbitmq user (--user rabbitmq), never root. An exec'd process runs inside the target's bounding cap set, so a root probe's own needs pollute the derived minimum: root needs DAC_OVERRIDE to read the rabbitmq-owned 0600 cookie and FOWNER to rewrite the rabbitmq-owned enabled_plugins — both derived falsely-required before this fix, while the broker itself was healthy.

Also 4.x-specific: queue declares must be durable — RabbitMQ 4.x rejects transient non-exclusive queues (transient_nonexcl_queues deprecated).

capabilities — derived by drop-test

Scope (run_config + out-of-band conditions)