Creating Containers¶
BugZoo uses Docker containers to provide a controlled, sandbox for interacting
with historical software bugs. Individual containers in BugZoo are represented
as Container
instances. All interaction with containers, including
their creation and destruction, is managed through the ContainerManager
class, exposed by the client’s containers
property
(e.g., client.containers
).
To provision (i.e., create) a container for a given bug:
bug = client.bugs['manybugs:python:69223-69224']
container = client.containers.provision(bug)
To iterate over the unique identifiers (UIDs) of the containers associated with a given BugZoo instance and to fetch a container by its UID:
for uid in client.containers:
container = client.containers[uid]
To check whether the underlying Docker container for a given Container
is still alive:
client.containers.is_alive(container)
Note that containers will not be automatically destroyed when their
corresponding Container
instance goes out of scope. Containers must
be explicitly destroyed via the ContainerManager
as follows:
del client.containers[container.uid]
All containers created by a BugZoo server will be automatically destroyed when the server closes.
API Reference¶
-
class
Container
[source]¶ Containers provide ephemeral, mutable instances of registered bugs, and are used to conduct studies of software bugs. Behind the scenes, containers are implemented as Docker containers.
-
id
→ str¶
-
static
from_dict
(d: Dict[str, Any]) → bugzoo.core.container.Container[source]¶
-
-
class
ContainerManager
[source]¶ -
__getitem__
(uid: str) → bugzoo.core.container.Container[source]¶ Fetches a container by its ID.
- Parameters
uid – the ID of the container.
- Returns
the container with the given ID.
- Raises
KeyError – if no container is found with the given ID.
-
__delitem__
(uid: str) → None[source]¶ Deletes a given container.
- Parameters
uid – the ID of the container.
- Raises
KeyError – if no container is found with the given ID, or the container has already been destroyed.
-
__contains__
(uid: str) → bool[source]¶ Checks whether a container with a given ID exists.
- Parameter:
uid: the ID of the container.
- Returns
True if the container exists; false if not.
-
__iter__
() → Iterator[str][source]¶ Returns an iterator over the identifiers of all of the containers that are currently running on the server.
-
provision
(bug: bugzoo.core.bug.Bug, *, plugins: Optional[List[bugzoo.core.tool.Tool]] = None) → bugzoo.core.container.Container[source]¶ Provisions a container for a given bug.
-
is_alive
(container: bugzoo.core.container.Container) → bool[source]¶ Determines whether or not a given container is still alive.
-