Each role (with outward-facing ingress needs) depends on caddy since they depend on the availability of the 'caddy' network which is set in that role. Caddy in turn depends on docker.