Creating Containers¶
Basic Usage¶
from pocketdock import create_new_container
c = create_new_container()
result = c.run("echo hello")
c.shutdown()
With a context manager:
Parameters¶
create_new_container() accepts the following keyword-only arguments:
| Parameter | Type | Default | Description |
|---|---|---|---|
image |
str |
"pocketdock/minimal-python" |
Container image tag |
name |
str \| None |
None |
Container name (auto-generated as pd-{hex} if None) |
timeout |
int |
30 |
Default exec timeout in seconds |
mem_limit |
str \| None |
None |
Memory limit (e.g., "256m", "1g") |
cpu_percent |
int \| None |
None |
CPU cap as percentage (e.g., 50) |
persist |
bool |
False |
If True, shutdown() stops but doesn't remove |
volumes |
dict[str, str] \| None |
None |
Host-to-container mounts |
project |
str \| None |
None |
Project name (auto-detected from .pocketdock/) |
profile |
str \| None |
None |
Image profile name ("minimal-python", "minimal-node", "minimal-bun", "dev", "agent", "embedded") |
devices |
list[str] \| None |
None |
Host devices to passthrough (e.g., ["/dev/ttyUSB0"]) |
ports |
dict[int, int] \| None |
None |
Host-to-container port mappings (e.g., {8080: 80}) |
c = create_new_container(
image="pocketdock/dev",
name="my-sandbox",
timeout=60,
mem_limit="512m",
cpu_percent=75,
persist=True,
volumes={"/host/data": "/container/data"},
)
Container Properties¶
| Property | Type | Description |
|---|---|---|
container_id |
str |
Full container ID hex string |
socket_path |
str |
Path to the engine Unix socket |
name |
str |
Human-readable container name |
persist |
bool |
Whether the container survives shutdown() |
project |
str |
Associated project name (empty if none) |
data_path |
str |
Instance data directory path (empty if none) |
Container Info¶
Get a live snapshot of the container's state:
info = c.info()
info.status # "running"
info.image # "pocketdock/minimal-python"
info.memory_usage # "42.1 MB"
info.memory_limit # "256 MB"
info.memory_percent # 16.4
info.cpu_percent # 3.2
info.pids # 2
info.network # True
info.ip_address # "172.17.0.2"
info.uptime # datetime.timedelta(seconds=45)
info.processes # tuple of process dicts
See Types > ContainerInfo for all 15 fields.
Resource Limits¶
Set memory and CPU limits at creation time:
# Memory limit: 256MB
c = create_new_container(mem_limit="256m")
# CPU limit: 50% of one core
c = create_new_container(cpu_percent=50)
# Both
c = create_new_container(mem_limit="1g", cpu_percent=75)
Memory format: "256m", "512m", "1g", "2g", etc.
Reboot¶
Restart the container in place (preserves the filesystem):
Recreate from scratch with the same configuration (fresh filesystem):
Snapshot¶
Commit the container's current filesystem as a new image:
The image can be used to create new containers:
Shutdown¶
Stop and remove the container:
c.shutdown() # Graceful stop (SIGTERM, then SIGKILL after timeout)
c.shutdown(force=True) # Immediate SIGKILL
For persistent containers (persist=True), shutdown() only stops — it doesn't remove:
c = create_new_container(persist=True, name="my-sandbox")
c.shutdown() # Stops, but container can be resumed later
See Persistence for resume/destroy operations.
Port Mapping¶
Expose container ports on the host:
# Map host port 8080 to container port 80
c = create_new_container(ports={8080: 80})
# Multiple port mappings
c = create_new_container(ports={8080: 80, 3000: 3000})
The dict key is the host port, the value is the container port. Port mappings are persisted in instance metadata and restored automatically on resume_container().
Volumes¶
Mount host directories into the container:
c = create_new_container(
volumes={
"/host/project/src": "/home/sandbox/src",
"/host/data": "/home/sandbox/data",
}
)
Volume mounts are read-write. The host path is the dict key, the container path is the value.