4fc0707760
Replace the manual state-dict + per-resource branching teardown in DockerBottleBackend.launch with an ExitStack: each resource registers its own cleanup callback at the moment it's created, and stack.close() unwinds in LIFO order. The previous form had to hand-coordinate four nullable slots and re-check existence for the container; ExitStack encodes the same semantics declaratively.