我可以使用shiplift获取正在运行的容器的列表,但发现很难停止它们。经过反复试验,似乎我可以创建一个期货向量,然后将它们全部加入,以创建一个单一的期货返回。似乎没有调用这个加入的未来,并且容器永远都不会停止。是否有更好的方法来运行所有这些期货,然后返回结果?
let docker = connection.clone();
docker
.containers()
.list(&Default::default())
.map(move |list| {
let mut futures = Vec::new();
for container in list {
let cont = connection.containers().get(&container.id);
println!("Stopping {}", cont.id());
futures.push(cont.stop(Some(std::time::Duration::from_secs(1))));
// futures.push(connection.containers().get(&container.id).stop(None).map_err(|_| println!("error")));
}
join_all(futures)
})
.map(|_| println!("Stopped all"))
.map_err(|e| eprintln!("Error: {}", e))