pub struct DockerRuntime { /* private fields */ }Expand description
Docker container runtime backed by the bollard crate.
Connects to the local Docker daemon using the platform default transport (Unix socket on Linux and macOS, named pipe on Windows).
Implementations§
Source§impl DockerRuntime
impl DockerRuntime
Sourcepub fn from_client(client: Docker) -> Self
pub fn from_client(client: Docker) -> Self
Wrap an existing bollard::Docker client. Useful for tests that
supply a pre-configured client (custom transport, mock, etc.).
Sourcepub async fn list_managed(&self, project: &str) -> Result<Vec<ManagedContainer>>
pub async fn list_managed(&self, project: &str) -> Result<Vec<ManagedContainer>>
List every container labelled with lightshuttle.project=<project>,
including stopped ones. Used by the CLI to implement ps and
down without relying on in-memory state.
Trait Implementations§
Source§impl ContainerRuntime for DockerRuntime
impl ContainerRuntime for DockerRuntime
Source§async fn ensure_project_network(&self, project: &str) -> Result<()>
async fn ensure_project_network(&self, project: &str) -> Result<()>
Ensure a per-project user-defined bridge network exists, creating
it when absent. Idempotent: concurrent calls are safe because a
409 Conflict response (network already exists) is treated as
success. Containers attached to this network can reach each other
by their container name, enabling resources.<name>.url hostnames
to resolve without extra configuration.Source§async fn teardown_project_network(&self, project: &str) -> Result<()>
async fn teardown_project_network(&self, project: &str) -> Result<()>
Remove the per-project bridge network. Idempotent: a
404 Not Found response is treated as success. Call after all containers
belonging to the project have been removed; Docker refuses to
delete a network that still has active endpoints.Source§async fn start(&self, spec: &ContainerSpec) -> Result<ContainerId>
async fn start(&self, spec: &ContainerSpec) -> Result<ContainerId>
Start a container according to
spec. Pulls the image if not
already present locally.Source§async fn stop(&self, id: &ContainerId, grace: Duration) -> Result<()>
async fn stop(&self, id: &ContainerId, grace: Duration) -> Result<()>
Stop a container, sending
SIGTERM and then SIGKILL after
grace. Idempotent: stopping an already stopped container is a
no-op.Source§async fn remove(&self, name: &str) -> Result<()>
async fn remove(&self, name: &str) -> Result<()>
Remove a container by name, forcing removal even if it is still
running. Idempotent: removing a container that does not exist is a
no-op. Named volumes are preserved. Read more
Source§async fn inspect(&self, id: &ContainerId) -> Result<ContainerStatus>
async fn inspect(&self, id: &ContainerId) -> Result<ContainerStatus>
Report the current status of a container.
Source§async fn wait_healthy(&self, id: &ContainerId, timeout: Duration) -> Result<()>
async fn wait_healthy(&self, id: &ContainerId, timeout: Duration) -> Result<()>
Block until the container reports a healthy status or
timeout
elapses. Returns crate::RuntimeError::Timeout in the latter
case.Source§async fn logs(&self, id: &ContainerId, follow: bool) -> Result<LogChunkStream>
async fn logs(&self, id: &ContainerId, follow: bool) -> Result<LogChunkStream>
Stream logs from a container. When
follow is true the stream
stays open and emits new chunks as they arrive; when false the
stream completes after the existing logs are drained.Auto Trait Implementations§
impl !RefUnwindSafe for DockerRuntime
impl !UnwindSafe for DockerRuntime
impl Freeze for DockerRuntime
impl Send for DockerRuntime
impl Sync for DockerRuntime
impl Unpin for DockerRuntime
impl UnsafeUnpin for DockerRuntime
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request