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). Implements
crate::ContainerRuntime so it can be passed to crate::LifecycleManager.
§Example
use lightshuttle_runtime::DockerRuntime;
let runtime = DockerRuntime::connect()?;Implementations§
Source§impl DockerRuntime
impl DockerRuntime
Sourcepub fn connect() -> Result<Self>
pub fn connect() -> Result<Self>
Connect to the local Docker daemon using the platform default transport.
Returns crate::RuntimeError::Connect when the daemon socket or named
pipe cannot be reached.
Sourcepub fn from_client(client: Docker) -> Self
pub fn from_client(client: Docker) -> Self
Wrap an existing bollard::Docker client.
Useful when the caller manages the client lifetime directly or needs a custom transport (e.g. a TLS-secured remote daemon or a test double).
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>.
Includes stopped and dead containers, so the CLI can implement ps
and down without relying on in-memory state. The result is sorted
alphabetically by resource name.
§Example
use lightshuttle_runtime::DockerRuntime;
let runtime = DockerRuntime::connect()?;
let containers = runtime.list_managed("myapp").await?;
for c in &containers {
println!("{}: {:?}", c.resource, c.status);
}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<()>
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<()>
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>
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<()>
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<()>
Source§async fn inspect(&self, id: &ContainerId) -> Result<ContainerStatus>
async fn inspect(&self, id: &ContainerId) -> Result<ContainerStatus>
Source§async fn wait_healthy(&self, id: &ContainerId, timeout: Duration) -> Result<()>
async fn wait_healthy(&self, id: &ContainerId, timeout: Duration) -> Result<()>
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>
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
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>
T in a tonic::Request