use bollard::models::CreateImageInfo;
use bollard::Docker;
use futures_util::stream::TryStreamExt;
use std::env::args;
use tokio::fs::File;
use tokio_util::io::ReaderStream;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + 'static>> {
let arguments: Vec<String> = args().collect();
if arguments.len() == 1 || arguments.len() > 2 {
println!("Usage: image_from_scratch <path to tar archive>");
return Ok(());
}
let file = File::open(&arguments[1])
.await
.expect("Could not find archive.");
let stream = ReaderStream::new(file);
let docker = Docker::connect_with_socket_defaults().unwrap();
let options = bollard::query_parameters::CreateImageOptionsBuilder::default()
.from_src("-") .repo("bollard_image_scratch_example") .tag("1.0.0") .build();
let result: Vec<CreateImageInfo> = docker
.create_image(Some(options), Some(bollard::body_try_stream(stream)), None)
.try_collect()
.await?;
dbg!(&result[0]);
Ok(())
}