42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
|
use bollard::{API_DEFAULT_VERSION, Docker};
|
||
|
use futures_util::future::TryFutureExt;
|
||
|
use bollard::container::ListContainersOptions;
|
||
|
|
||
|
use std::collections::HashMap;
|
||
|
use std::default::Default;
|
||
|
|
||
|
#[tokio::main]
|
||
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||
|
let connection = Docker::connect_with_defaults().expect("connection");
|
||
|
|
||
|
let mut filters = HashMap::new();
|
||
|
filters.insert("status", vec!["running"]);
|
||
|
filters.insert("label", vec!["auto-restart.unhealthy"]);
|
||
|
filters.insert("health", vec!["unhealthy"]);
|
||
|
|
||
|
let options = Some(ListContainersOptions{
|
||
|
all: true,
|
||
|
filters,
|
||
|
..Default::default()
|
||
|
});
|
||
|
|
||
|
let result = connection.list_containers(options).await;
|
||
|
|
||
|
//let result = connection.ping().map_ok(|_| Ok::<_, ()>(println!("Connected!"))).await;
|
||
|
|
||
|
if let Err(x) = result {
|
||
|
eprintln!("error: {:#?}", x);
|
||
|
} else if let Ok(found) = result {
|
||
|
println!("found: {}", found.len());
|
||
|
for container in found {
|
||
|
let container_id = container.id.unwrap();
|
||
|
println!("{:?}", container.names.unwrap_or(vec![container_id.clone()]));
|
||
|
|
||
|
//let r = connection.restart_container(container_id.as_str(), None).await;
|
||
|
//println!("{:?}", r);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Ok(())
|
||
|
}
|