use docker_wrapper::{DockerCommand, RunCommand, StopCommand};
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Starting Redis with dynamic port allocation...");
let container_id = RunCommand::new("redis:alpine")
.name("test-redis")
.port_dyn(6379) .detach()
.rm() .execute()
.await?;
println!("Container started: {}", container_id.short());
let port_mappings = container_id.port_mappings().await?;
if let Some(mapping) = port_mappings.first() {
println!(
"Redis is available at {}:{}",
mapping.host_ip, mapping.host_port
);
println!(
"You can connect with: redis-cli -h {} -p {}",
mapping.host_ip, mapping.host_port
);
}
if let Some(mapping) = container_id.port_mapping(6379).await? {
println!(
"Port 6379 is mapped to: {}:{}",
mapping.host_ip, mapping.host_port
);
}
println!("\nContainer will run for 10 seconds...");
sleep(Duration::from_secs(10)).await;
println!("Stopping container...");
StopCommand::new(container_id.as_str()).execute().await?;
println!("Container stopped and removed automatically!");
Ok(())
}