|
|
|
@ -142,8 +142,12 @@ fn init_container_overlay<P: AsRef<Path>>(volume_path: P, upper_path: P, merged_
|
|
|
|
let lower_dir = volume_path.as_ref().to_string_lossy().to_string();
|
|
|
|
let lower_dir = volume_path.as_ref().to_string_lossy().to_string();
|
|
|
|
let upper_dir = upper_path.as_ref().to_string_lossy().to_string();
|
|
|
|
let upper_dir = upper_path.as_ref().to_string_lossy().to_string();
|
|
|
|
let merged_dir = merged_path.as_ref().to_string_lossy().to_string();
|
|
|
|
let merged_dir = merged_path.as_ref().to_string_lossy().to_string();
|
|
|
|
|
|
|
|
// 创建overlay的工作目录
|
|
|
|
|
|
|
|
let work_path = merged_path.as_ref().parent().unwrap().join("work");
|
|
|
|
|
|
|
|
let _ = create_dir(&work_path, true);
|
|
|
|
|
|
|
|
let work_dir = work_path.to_string_lossy().to_string();
|
|
|
|
|
|
|
|
|
|
|
|
let dirs = format!("lowerdir={lower_dir},upperdir={upper_dir},workdir={merged_dir}");
|
|
|
|
let dirs = format!("lowerdir={lower_dir},upperdir={upper_dir},workdir={work_dir}");
|
|
|
|
let out = process::Command::new("mount")
|
|
|
|
let out = process::Command::new("mount")
|
|
|
|
.arg("-t")
|
|
|
|
.arg("-t")
|
|
|
|
.arg("overlay")
|
|
|
|
.arg("overlay")
|
|
|
|
@ -181,7 +185,7 @@ fn init_container_dev<P: AsRef<Path>>(container_merged_path: P) -> Result<()> {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 执行绑定挂载
|
|
|
|
// 执行绑定挂载
|
|
|
|
mount(Some(host_dev_path.as_str()), container_dev_path.to_str().unwrap(), Some("tmpfs"), MsFlags::MS_BIND, None::<&str>)?;
|
|
|
|
mount(Some(host_dev_path.as_str()), container_dev_path.to_str().unwrap(), None::<&str>, MsFlags::MS_BIND, None::<&str>)?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -252,7 +256,7 @@ fn init_container_pivot<P: AsRef<Path>>(merged_path: P) -> Result<()> {
|
|
|
|
let pwd_str = pwd_path.to_string_lossy().to_string();
|
|
|
|
let pwd_str = pwd_path.to_string_lossy().to_string();
|
|
|
|
|
|
|
|
|
|
|
|
// 挂载bind todo
|
|
|
|
// 挂载bind todo
|
|
|
|
mount(Some(pwd_str.as_str()), pwd_str.as_str(), Some("bind"), MsFlags::MS_BIND | MsFlags::MS_REC, None::<&str>)?;
|
|
|
|
mount(Some(pwd_str.as_str()), pwd_str.as_str(), None::<&str>, MsFlags::MS_BIND | MsFlags::MS_REC, None::<&str>)?;
|
|
|
|
|
|
|
|
|
|
|
|
// 创建 rootfs/.pivot_root 目录用于存储 old_root
|
|
|
|
// 创建 rootfs/.pivot_root 目录用于存储 old_root
|
|
|
|
let pivot_root_dir = format!("{pwd_str}/.pivot_root");
|
|
|
|
let pivot_root_dir = format!("{pwd_str}/.pivot_root");
|
|
|
|
@ -614,7 +618,7 @@ fn stop_container(containers_id: &str, is_remove: bool) -> Result<()> {
|
|
|
|
return Ok(())
|
|
|
|
return Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for container_id in containers_id.split(" ") {
|
|
|
|
for container_id in containers_id.split(" ") {
|
|
|
|
// 容器网络删除
|
|
|
|
// 容器网络尝试删除
|
|
|
|
remove_network(container_id);
|
|
|
|
remove_network(container_id);
|
|
|
|
|
|
|
|
|
|
|
|
let container_work_path = containers_path.join(container_id);
|
|
|
|
let container_work_path = containers_path.join(container_id);
|
|
|
|
|