|
|
@ -1,4 +1,4 @@
|
|
|
|
use std::{io, fs, fmt, os, path};
|
|
|
|
use std::{io, fs, fmt, os, path, process};
|
|
|
|
use io::Read;
|
|
|
|
use io::Read;
|
|
|
|
use fmt::Display;
|
|
|
|
use fmt::Display;
|
|
|
|
use os::fd::{AsFd, AsRawFd};
|
|
|
|
use os::fd::{AsFd, AsRawFd};
|
|
|
@ -89,7 +89,7 @@ fn extend_image(image_name: &String) -> Result<PathBuf> {
|
|
|
|
let volume_path_str = volume_path.to_str().unwrap(); // 安全的unwrap
|
|
|
|
let volume_path_str = volume_path.to_str().unwrap(); // 安全的unwrap
|
|
|
|
|
|
|
|
|
|
|
|
// 解压缩
|
|
|
|
// 解压缩
|
|
|
|
let out = std::process::Command::new("tar")
|
|
|
|
let out = process::Command::new("tar")
|
|
|
|
.arg("-xvf")
|
|
|
|
.arg("-xvf")
|
|
|
|
.arg(image_path_str)
|
|
|
|
.arg(image_path_str)
|
|
|
|
.arg("-C")
|
|
|
|
.arg("-C")
|
|
|
@ -125,7 +125,7 @@ fn init_container_overlay<P: AsRef<Path>>(volume_path: P, upper_path: P, merged_
|
|
|
|
|
|
|
|
|
|
|
|
let dirs = format!("lowerdir={lower_dir},upperdir={upper_dir},workdir={merged_dir}");
|
|
|
|
let dirs = format!("lowerdir={lower_dir},upperdir={upper_dir},workdir={merged_dir}");
|
|
|
|
println!("dirs: {dirs:?}");
|
|
|
|
println!("dirs: {dirs:?}");
|
|
|
|
let out = std::process::Command::new("mount")
|
|
|
|
let out = process::Command::new("mount")
|
|
|
|
.arg("-t")
|
|
|
|
.arg("-t")
|
|
|
|
.arg("overlay")
|
|
|
|
.arg("overlay")
|
|
|
|
.arg("overlay")
|
|
|
|
.arg("overlay")
|
|
|
@ -166,7 +166,7 @@ fn init_container_custom_volume<P: AsRef<Path>>(container_merged_path: P, custom
|
|
|
|
create_dir(&container_path, true)?;
|
|
|
|
create_dir(&container_path, true)?;
|
|
|
|
|
|
|
|
|
|
|
|
// 绑定
|
|
|
|
// 绑定
|
|
|
|
let out = std::process::Command::new("mount")
|
|
|
|
let out = process::Command::new("mount")
|
|
|
|
.arg("-o")
|
|
|
|
.arg("-o")
|
|
|
|
.arg("bind")
|
|
|
|
.arg("bind")
|
|
|
|
.arg(host_path)
|
|
|
|
.arg(host_path)
|
|
|
@ -368,7 +368,7 @@ fn run_container(_container_id: &String, cmd: &String, args: &RockerArgs, volume
|
|
|
|
init_container_user(rocker_uid, rocker_gid).unwrap();
|
|
|
|
init_container_user(rocker_uid, rocker_gid).unwrap();
|
|
|
|
|
|
|
|
|
|
|
|
let cmd_vec = cmd.split(" ").collect::<Vec<&str>>();
|
|
|
|
let cmd_vec = cmd.split(" ").collect::<Vec<&str>>();
|
|
|
|
let err = std::process::Command::new(cmd_vec[0])
|
|
|
|
let err = process::Command::new(cmd_vec[0])
|
|
|
|
.args(&cmd_vec[1..])
|
|
|
|
.args(&cmd_vec[1..])
|
|
|
|
.exec();
|
|
|
|
.exec();
|
|
|
|
println!("execv {cmd_vec:?}失败: {err:?}");
|
|
|
|
println!("execv {cmd_vec:?}失败: {err:?}");
|
|
|
@ -399,7 +399,7 @@ fn run_container(_container_id: &String, cmd: &String, args: &RockerArgs, volume
|
|
|
|
init_container_user(rocker_uid, rocker_gid).unwrap();
|
|
|
|
init_container_user(rocker_uid, rocker_gid).unwrap();
|
|
|
|
|
|
|
|
|
|
|
|
let cmd_vec = cmd.split(" ").collect::<Vec<&str>>();
|
|
|
|
let cmd_vec = cmd.split(" ").collect::<Vec<&str>>();
|
|
|
|
let err = std::process::Command::new(cmd_vec[0])
|
|
|
|
let err = process::Command::new(cmd_vec[0])
|
|
|
|
.args(&cmd_vec[1..])
|
|
|
|
.args(&cmd_vec[1..])
|
|
|
|
.exec();
|
|
|
|
.exec();
|
|
|
|
println!("execv {cmd_vec:?}失败: {err:?}");
|
|
|
|
println!("execv {cmd_vec:?}失败: {err:?}");
|
|
|
|