准备改造容器状态记录的方式

main
阳光少年 1 year ago
parent 1b4cf33ce8
commit 8b6762dab0

144
rm.log

@ -0,0 +1,144 @@
卸载overlayfs卷
停止容器: "694ff469"
删除容器 694ff469 成功
卸载overlayfs卷
停止容器: "48bb03e4"
删除容器 48bb03e4 成功
卸载overlayfs卷
停止容器: "d682590f"
删除容器 d682590f 成功
卸载overlayfs卷
停止容器: "1fb07eeb"
删除容器 1fb07eeb 成功
卸载overlayfs卷
停止容器: "2115f7bc"
删除容器 2115f7bc 成功
卸载overlayfs卷
停止容器: "67852dcf"
删除容器 67852dcf 成功
卸载overlayfs卷
停止容器: "070a42d6"
删除容器 070a42d6 成功
卸载overlayfs卷
停止容器: "6ec7154f"
删除容器 6ec7154f 成功
卸载overlayfs卷
停止容器: "f05e5556"
删除容器 f05e5556 成功
卸载overlayfs卷
停止容器: "e6fde771"
删除容器 e6fde771 成功
卸载overlayfs卷
停止容器: "9e891ecb"
删除容器 9e891ecb 成功
卸载overlayfs卷
停止容器: "1300f1b0"
删除容器 1300f1b0 成功
卸载overlayfs卷
停止容器: "3b33eda3"
删除容器 3b33eda3 成功
卸载overlayfs卷
停止容器: "aad0cad3"
删除容器 aad0cad3 成功
卸载overlayfs卷
停止容器: "c24f4ef6"
删除容器 c24f4ef6 成功
卸载overlayfs卷
停止容器: "56434f7c"
删除容器 56434f7c 成功
卸载overlayfs卷
停止容器: "a1fd36eb"
删除容器 a1fd36eb 成功
卸载overlayfs卷
停止容器: "25a974a4"
删除容器 25a974a4 成功
卸载overlayfs卷
停止容器: "3cee3156"
删除容器 3cee3156 成功
卸载overlayfs卷
停止容器: "07e9b8d3"
删除容器 07e9b8d3 成功
卸载overlayfs卷
停止容器: "093c1f19"
删除容器 093c1f19 成功
卸载overlayfs卷
停止容器: "39c10d1e"
删除容器 39c10d1e 成功
卸载overlayfs卷
停止容器: "21ee50a6"
删除容器 21ee50a6 成功
卸载overlayfs卷
停止容器: "5c2d8295"
删除容器 5c2d8295 成功
卸载overlayfs卷
停止容器: "24f0ffde"
删除容器 24f0ffde 成功
卸载overlayfs卷
停止容器: "002d9bf9"
删除容器 002d9bf9 成功
卸载overlayfs卷
停止容器: "afeac42b"
删除容器 afeac42b 成功
卸载overlayfs卷
停止容器: "2debe50b"
删除容器 2debe50b 成功
卸载overlayfs卷
停止容器: "f1405d92"
删除容器 f1405d92 成功
卸载overlayfs卷
停止容器: "f7ced84a"
删除容器 f7ced84a 成功
卸载overlayfs卷
停止容器: "11fd79cc"
删除容器 11fd79cc 成功
卸载overlayfs卷
停止容器: "5062e991"
删除容器 5062e991 成功
卸载overlayfs卷
停止容器: "6b83b453"
删除容器 6b83b453 成功
卸载overlayfs卷
停止容器: "e6e73543"
删除容器 e6e73543 成功
卸载overlayfs卷
停止容器: "f04dd225"
删除容器 f04dd225 成功
卸载overlayfs卷
停止容器: "e6e748bf"
删除容器 e6e748bf 成功
卸载overlayfs卷
停止容器: "6d64ac98"
删除容器 6d64ac98 成功
卸载overlayfs卷
停止容器: "e48e570e"
删除容器 e48e570e 成功
卸载overlayfs卷
停止容器: "2c8745c3"
删除容器 2c8745c3 成功
卸载overlayfs卷
停止容器: "67a8123f"
删除容器 67a8123f 成功
卸载overlayfs卷
停止容器: "9142fcdc"
删除容器 9142fcdc 成功
卸载overlayfs卷
停止容器: "6179827e"
删除容器 6179827e 成功
卸载overlayfs卷
停止容器: "792cd124"
删除容器 792cd124 成功
卸载overlayfs卷
停止容器: "284b1e41"
删除容器 284b1e41 成功
卸载overlayfs卷
停止容器: "3c14dbc2"
删除容器 3c14dbc2 成功
卸载overlayfs卷
停止容器: "ebe8e61e"
删除容器 ebe8e61e 成功
卸载overlayfs卷
停止容器: "d73241d5"
删除容器 d73241d5 成功
卸载overlayfs卷
停止容器: "8cadde8e"
删除容器 8cadde8e 成功

@ -17,7 +17,7 @@ use clap::Parser;
use error::{Result, RockerError}; use error::{Result, RockerError};
mod error; mod error;
use network::create_network; use network::{create_network, remove_network};
mod network; mod network;
static WORKSPACE: &str = "/home/rocker"; static WORKSPACE: &str = "/home/rocker";
@ -27,6 +27,7 @@ static mut STACK: [u8; 1024*1024*1] = [0; 1024*1024*1];
static CLONE_FLAG: i32 = 0b1101100000000100000000000000000; // CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWPID | CLONE_NEWIPC | CLONE_NEWNET; static CLONE_FLAG: i32 = 0b1101100000000100000000000000000; // CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWPID | CLONE_NEWIPC | CLONE_NEWNET;
static START_T: OnceLock<time::Instant> = OnceLock::new(); static START_T: OnceLock<time::Instant> = OnceLock::new();
static CONTAINER_INFO: OnceLock<ContainerInfo> = OnceLock::new();
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
#[command(version, about, long_about = None)] #[command(version, about, long_about = None)]
@ -246,7 +247,7 @@ fn init_container_pivot<P: AsRef<Path>>(merged_path: P) -> Result<()> {
std::env::set_current_dir("/")?; std::env::set_current_dir("/")?;
// 卸载 old_root, 并删除临时文件 // 卸载 old_root, 并删除临时文件
umount2(".pivot_root", MntFlags::MNT_DETACH).unwrap(); umount2(".pivot_root", MntFlags::MNT_FORCE).unwrap();
std::fs::remove_dir(".pivot_root").unwrap(); std::fs::remove_dir(".pivot_root").unwrap();
Ok(()) Ok(())
} }
@ -367,6 +368,7 @@ fn start(is_wait: bool, cb: CloneCb, clong_flags: CloneFlags, container_id: &Str
Ok(child_pid.as_raw()) Ok(child_pid.as_raw())
} }
Err(e) => { Err(e) => {
Err(RockerError::OtherError(format!("clone err: {e}"))) Err(RockerError::OtherError(format!("clone err: {e}")))
} }
} }
@ -470,12 +472,23 @@ impl Display for ContainerStatus {
struct ContainerInfo { struct ContainerInfo {
id: String, id: String,
pid: i32, pid: i32,
status: ContainerStatus,
run: String, // /bin/bash run: String, // /bin/bash
image: String, // busybox image: String, // busybox
volume: String, // /root/tmp:/root/tmp,/root/tmp1:/root/tmp1 volume: String, // /root/tmp:/root/tmp,/root/tmp1:/root/tmp1
env: String, // a=1,b=2,c=3 或者 env文件路径 env: String, // a=1,b=2,c=3 或者 env文件路径
status: ContainerStatus, log: bool,
log: bool wait: bool,
}
impl ContainerInfo {
fn flush(&self) -> Result<()>{
let container_info_path = Path::new(WORKSPACE).join("containers").join(&self.id).join(INFO_FILE);
let toml_str = toml::to_string(&self)?;
fs::write(container_info_path, toml_str)?;
Ok(())
}
} }
impl Display for ContainerInfo { impl Display for ContainerInfo {
@ -497,6 +510,7 @@ fn save_container_info(args: &RockerArgs, container_id: &String, pid: i32) -> Re
env: args.env.clone().unwrap_or("".to_string()), env: args.env.clone().unwrap_or("".to_string()),
status: ContainerStatus::READY, status: ContainerStatus::READY,
log: args.log, log: args.log,
wait: args.wait,
}; };
let toml_str = toml::to_string(&container_info)?; let toml_str = toml::to_string(&container_info)?;
fs::write(container_info_path, toml_str)?; fs::write(container_info_path, toml_str)?;
@ -550,14 +564,16 @@ fn show_containers(is_show_all: bool) -> Result<()> {
} }
fn stop_container(containers_id: &str, is_remove: bool) -> Result<()> { fn stop_container(containers_id: &str, is_remove: bool) -> Result<()> {
let containers_path = Path::new(WORKSPACE).join("containers");
if containers_id == "all" { if containers_id == "all" {
for container_info in get_all_container_info()?{ for container_info in get_all_container_info()?{
stop_container(container_info.id.as_str(), is_remove)? stop_container(container_info.id.as_str(), is_remove)?
} }
//
return Ok(()) return Ok(())
} }
for container_id in containers_id.split(" ") { for container_id in containers_id.split(" ") {
let container_work_path = Path::new(WORKSPACE).join("containers").join(container_id); let container_work_path = containers_path.join(container_id);
let container_merged_path = container_work_path.join("merged"); let container_merged_path = container_work_path.join("merged");
if let Ok(container_info) = get_container_info(container_id) { if let Ok(container_info) = get_container_info(container_id) {
// 正在运行中的需要 kill // 正在运行中的需要 kill
@ -581,15 +597,15 @@ fn stop_container(containers_id: &str, is_remove: bool) -> Result<()> {
} }
}) })
.for_each(|s| { .for_each(|s| {
match umount2(s.as_str(), MntFlags::MNT_DETACH) { match umount2(s.as_str(), MntFlags::MNT_FORCE) {
Ok(_) => println!("卸载自定卷{s}"), Ok(_) => println!("卸载自定卷{s}"),
Err(e) => println!("卸载卷{s}失败: {e:?}"), Err(e) => println!("卸载卷{s}失败: {e:?}"),
} }
}); });
} }
// 卸载overlayfs // 卸载overlayfs
match umount2(container_merged_path.to_str().unwrap(), MntFlags::MNT_DETACH) { match umount2(container_merged_path.to_str().unwrap(), MntFlags::MNT_FORCE) {
Ok(_) => println!("卸载overlayfs卷"), Ok(_) => println!("卸载overlayfs卷: {container_merged_path:?}"),
Err(e) => println!("卸载overlayfs失败: {e:?}"), Err(e) => println!("卸载overlayfs失败: {e:?}"),
} }
@ -609,6 +625,9 @@ fn stop_container(containers_id: &str, is_remove: bool) -> Result<()> {
Err(e) => println!("删除容器失败: {e:?}"), Err(e) => println!("删除容器失败: {e:?}"),
} }
} }
// 容器网络删除
remove_network(container_id);
} }
Ok(()) Ok(())
} }
@ -618,6 +637,7 @@ fn main() -> Result<()>{
START_T.get_or_init(|| { START_T.get_or_init(|| {
time::Instant::now() time::Instant::now()
}); });
let mut args = RockerArgs::parse(); let mut args = RockerArgs::parse();
if args.image.is_some() || args.restart.is_some() { if args.image.is_some() || args.restart.is_some() {
let volume_path; let volume_path;
@ -649,9 +669,24 @@ fn main() -> Result<()>{
unreachable!() unreachable!()
} }
} }
CONTAINER_INFO.get_or_init(||{
ContainerInfo {
id: container_id.clone(),
pid: -1,
run: args.run.as_ref().unwrap().clone(),
image: args.image.as_ref().unwrap().clone(),
volume: args.volume.clone().unwrap_or_default(),
env: args.env.clone().unwrap_or_default(),
status: ContainerStatus::READY,
log: args.log,
wait: args.wait
}
});
let container_info = CONTAINER_INFO.get().unwrap();
match run_container(&container_id, &cmd, &args, &volume_path, false) { match run_container(&container_id, &cmd, &args, &volume_path, false) {
Ok(child_pid) => { Ok(child_pid) => {
save_container_info(&args, &container_id, child_pid)?; // save_container_info(&args, &container_id, child_pid)?;
} }
Err(e) => { Err(e) => {
// clone 之后的错误 这里已经无法捕获了 // clone 之后的错误 这里已经无法捕获了

@ -1,4 +1,4 @@
use std::{fmt::{Display, Formatter}, fs::OpenOptions, io::{Read, Write}}; use std::{fmt::{Display, Formatter}, fs::OpenOptions, io::{stdout, Read, Write}};
use rand::Rng; use rand::Rng;
static NETWORK_FILE: &str = "/home/rocker/network"; static NETWORK_FILE: &str = "/home/rocker/network";
@ -53,6 +53,22 @@ fn set_slave_ip(slave_veth_name: &str, addr: &str, pid: &str) -> bool {
} }
fn set_snat(gateway_addr: &str, bridge_name: &str, action: &str) -> bool { fn set_snat(gateway_addr: &str, bridge_name: &str, action: &str) -> bool {
// 检查是否存在 iptables -t nat -L POSTROUTING -n
let args = ["-t", "nat", "-L", "POSTROUTING", "-n"];
let out = std::process::Command::new("iptables")
.args(args)
.output()
.unwrap();
let is_some = String::from_utf8_lossy(&out.stdout).contains(gateway_addr);
if is_some && action == "-A" {
println!("snat 已经存在, 无法再次创建");
return false;
} else if is_some == false && action == "-D" {
println!("snat 本身不存在,不需要删除");
return true;
}
// sudo iptables -t nat -A POSTROUTING -s 172.18.0.0/24 ! -o br0 -j MASQUERADE // sudo iptables -t nat -A POSTROUTING -s 172.18.0.0/24 ! -o br0 -j MASQUERADE
let args = ["-t", "nat", action, "POSTROUTING", "-s", &format!("{gateway_addr}/24"), "!", "-o", bridge_name, "-j", "MASQUERADE"]; let args = ["-t", "nat", action, "POSTROUTING", "-s", &format!("{gateway_addr}/24"), "!", "-o", bridge_name, "-j", "MASQUERADE"];
let out = std::process::Command::new("iptables") let out = std::process::Command::new("iptables")
@ -215,17 +231,35 @@ fn set_net(bridge_name: &str, addr: &str){
} }
} }
fn del_bridge(bridge_name: &str) { fn del_bridge(bridge_name: &str) -> bool {
// sudo brctl delbr br0 // 是否还存在设备
let args = ["delbr", bridge_name]; let args = ["link", "show", bridge_name];
println!("del_bridge: {args:?}"); let out = std::process::Command::new("ip")
let out = std::process::Command::new("brctl")
.args(args) .args(args)
.output() .output()
.unwrap(); .unwrap();
if !out.status.success() {
println!("{:?}", out); if out.status.success() {
// 下线
let args = ["link", "set", bridge_name, "down"];
let _ = std::process::Command::new("ip")
.args(args)
.output()
.unwrap();
// brctl delbr br0
let args = ["delbr", bridge_name];
let out = std::process::Command::new("brctl")
.args(args)
.output()
.unwrap();
if !out.status.success() {
println!("del_bridge: {args:?}");
println!("{:?}", out);
return false;
}
} }
true
} }
@ -309,6 +343,7 @@ fn write_network_info(all_network: Vec<NetWrok>) {
let mut f = OpenOptions::new() let mut f = OpenOptions::new()
.write(true) .write(true)
.create(true) .create(true)
.truncate(true)
.open(NETWORK_FILE) .open(NETWORK_FILE)
.unwrap(); .unwrap();
for n in all_network { for n in all_network {
@ -365,7 +400,6 @@ pub fn create_network(uuid_name: &str, pid: i32) -> bool {
// 写入到文件中 // 写入到文件中
write_network_info(all_network); write_network_info(all_network);
// 系统中创建桥 // 系统中创建桥
if create_bridge_dev(&network.bridge_name) && if create_bridge_dev(&network.bridge_name) &&
// 给桥分配ip // 给桥分配ip
@ -397,7 +431,40 @@ pub fn create_network(uuid_name: &str, pid: i32) -> bool {
} }
fn remove_network(uuid_name: &str) { fn del_dev(dev_name: &str) -> bool {
// 先检查是否还有该设备
let args = ["link", "show", dev_name];
let out = std::process::Command::new("ip")
.args(args)
.output()
.unwrap();
if out.status.success() {
// 下线
let args = ["link", "set", dev_name, "down"];
let _ = std::process::Command::new("ip")
.args(args)
.output()
.unwrap();
// ip link delete dev_name
let args = ["link", "delete", dev_name];
let out = std::process::Command::new("ip")
.args(args)
.output()
.unwrap();
if !out.status.success() {
println!("del_dev: {args:?}");
println!("{:?}", out);
return false;
}
}
true
}
pub fn remove_network(uuid_name: &str) {
let mut all_network = get_all_network(); let mut all_network = get_all_network();
let mut network = None; let mut network = None;
all_network = all_network.into_iter() all_network = all_network.into_iter()
@ -411,36 +478,18 @@ fn remove_network(uuid_name: &str) {
}).collect::<Vec<NetWrok>>(); }).collect::<Vec<NetWrok>>();
if let Some(network) = network { if let Some(network) = network {
del_dev(&network.bridge_name);
del_dev(&network.master_veth_name);
set_snat(&network.gateway_addr, &network.bridge_name, "-D");
} }
// 回写到文件中
write_network_info(all_network);
// todo 回写到文件中
// write_network_info(all_network);
} }
fn main(){ fn main(){
let container_id = uuid::Uuid::new_v4().to_string()[0..8].to_string(); let container_id = uuid::Uuid::new_v4().to_string()[0..8].to_string();
// create_network(&container_id, 17543); // create_network(&container_id, 2084);
remove_network("ac1aca8d"); remove_network("c3a20664");
return;
let addr = "192.168.124.1";
let bridge_name = &format!("rocker_{}", addr[8..].replace(".", "_"));
println!("{bridge_name}");
println!("{addr}");
create_bridge_dev(&bridge_name);
set_bridge_ip(&bridge_name, &addr);
set_up(&bridge_name);
// 我们在 ip addr add 172.18.0.1/24 dev br0 的时候补全了网段信息 /24, 所以在 ip link set br0 up的时候,
// 会自动配置路由表配置路由表 192.168.0.0/24 转发到这 bridge_name 的网络接口上
// set_route(bridge_name, addr);
set_net(bridge_name, addr);
let veth_name = "yanguang";
// connect(bridge_name, veth_name);
} }

@ -0,0 +1,398 @@
解压缩完毕: "busybox"
Output { status: ExitStatus(unix_wait_status(0)), stdout: "", stderr: "" }
clone ok: Pid(2310)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/3c14dbc2/upper,workdir=/home/rocker/containers/3c14dbc2/merged"
10.183.130.0,10.183.130.1,10.183.130.3,ro_3c14dbc2_1,ro_3c14dbc2_2,ro_3c14dbc2_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:32 UTC 2024
启动用时: 452ms
Pid(2310) exit: Exited(Pid(2310), 0)
clone ok: Pid(2370)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/67852dcf/upper,workdir=/home/rocker/containers/67852dcf/merged"
10.61.127.0,10.61.127.1,10.61.127.3,ro_67852dcf_1,ro_67852dcf_2,ro_67852dcf_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:32 UTC 2024
启动用时: 209ms
Pid(2370) exit: Exited(Pid(2370), 0)
clone ok: Pid(2403)
10.69.151.0,10.69.151.1,10.69.151.3,ro_aad0cad3_1,ro_aad0cad3_2,ro_aad0cad3_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/aad0cad3/upper,workdir=/home/rocker/containers/aad0cad3/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:33 UTC 2024
启动用时: 411ms
Pid(2403) exit: Exited(Pid(2403), 0)
clone ok: Pid(2453)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/56434f7c/upper,workdir=/home/rocker/containers/56434f7c/merged"
10.222.111.0,10.222.111.1,10.222.111.3,ro_56434f7c_1,ro_56434f7c_2,ro_56434f7c_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:33 UTC 2024
启动用时: 475ms
Pid(2453) exit: Exited(Pid(2453), 0)
clone ok: Pid(2486)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/a1fd36eb/upper,workdir=/home/rocker/containers/a1fd36eb/merged"
10.190.95.0,10.190.95.1,10.190.95.3,ro_a1fd36eb_1,ro_a1fd36eb_2,ro_a1fd36eb_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:34 UTC 2024
启动用时: 575ms
Pid(2486) exit: Exited(Pid(2486), 0)
clone ok: Pid(2529)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/3b33eda3/upper,workdir=/home/rocker/containers/3b33eda3/merged"
10.121.6.0,10.121.6.1,10.121.6.3,ro_3b33eda3_1,ro_3b33eda3_2,ro_3b33eda3_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:35 UTC 2024
启动用时: 666ms
Pid(2529) exit: Exited(Pid(2529), 0)
clone ok: Pid(2579)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/2115f7bc/upper,workdir=/home/rocker/containers/2115f7bc/merged"
10.80.42.0,10.80.42.1,10.80.42.3,ro_2115f7bc_1,ro_2115f7bc_2,ro_2115f7bc_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:35 UTC 2024
启动用时: 565ms
Pid(2579) exit: Exited(Pid(2579), 0)
clone ok: Pid(2612)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/d682590f/upper,workdir=/home/rocker/containers/d682590f/merged"
10.201.68.0,10.201.68.1,10.201.68.3,ro_d682590f_1,ro_d682590f_2,ro_d682590f_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:36 UTC 2024
启动用时: 476ms
Pid(2612) exit: Exited(Pid(2612), 0)
clone ok: Pid(2657)
10.122.151.0,10.122.151.1,10.122.151.3,ro_694ff469_1,ro_694ff469_2,ro_694ff469_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/694ff469/upper,workdir=/home/rocker/containers/694ff469/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:37 UTC 2024
启动用时: 608ms
Pid(2657) exit: Exited(Pid(2657), 0)
clone ok: Pid(2692)
10.0.63.0,10.0.63.1,10.0.63.3,ro_39c10d1e_1,ro_39c10d1e_2,ro_39c10d1e_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/39c10d1e/upper,workdir=/home/rocker/containers/39c10d1e/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:38 UTC 2024
启动用时: 578ms
Pid(2692) exit: Exited(Pid(2692), 0)
clone ok: Pid(2725)
10.9.56.0,10.9.56.1,10.9.56.3,ro_3cee3156_1,ro_3cee3156_2,ro_3cee3156_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/3cee3156/upper,workdir=/home/rocker/containers/3cee3156/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:38 UTC 2024
启动用时: 466ms
Pid(2725) exit: Exited(Pid(2725), 0)
clone ok: Pid(2758)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/284b1e41/upper,workdir=/home/rocker/containers/284b1e41/merged"
10.44.177.0,10.44.177.1,10.44.177.3,ro_284b1e41_1,ro_284b1e41_2,ro_284b1e41_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:39 UTC 2024
启动用时: 593ms
Pid(2758) exit: Exited(Pid(2758), 0)
clone ok: Pid(2791)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/792cd124/upper,workdir=/home/rocker/containers/792cd124/merged"
10.38.118.0,10.38.118.1,10.38.118.3,ro_792cd124_1,ro_792cd124_2,ro_792cd124_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:39 UTC 2024
启动用时: 551ms
Pid(2791) exit: Exited(Pid(2791), 0)
clone ok: Pid(2824)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/d73241d5/upper,workdir=/home/rocker/containers/d73241d5/merged"
10.101.187.0,10.101.187.1,10.101.187.3,ro_d73241d5_1,ro_d73241d5_2,ro_d73241d5_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:40 UTC 2024
启动用时: 491ms
Pid(2824) exit: Exited(Pid(2824), 0)
clone ok: Pid(2857)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/070a42d6/upper,workdir=/home/rocker/containers/070a42d6/merged"
容器文件系统创建完成
10.148.131.0,10.148.131.1,10.148.131.3,ro_070a42d6_1,ro_070a42d6_2,ro_070a42d6_3
create_network success
Sat Aug 10 06:43:41 UTC 2024
启动用时: 646ms
Pid(2857) exit: Exited(Pid(2857), 0)
clone ok: Pid(2890)
10.76.168.0,10.76.168.1,10.76.168.3,ro_25a974a4_1,ro_25a974a4_2,ro_25a974a4_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/25a974a4/upper,workdir=/home/rocker/containers/25a974a4/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:41 UTC 2024
启动用时: 678ms
Pid(2890) exit: Exited(Pid(2890), 0)
clone ok: Pid(2925)
10.80.199.0,10.80.199.1,10.80.199.3,ro_11fd79cc_1,ro_11fd79cc_2,ro_11fd79cc_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/11fd79cc/upper,workdir=/home/rocker/containers/11fd79cc/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:42 UTC 2024
启动用时: 510ms
Pid(2925) exit: Exited(Pid(2925), 0)
clone ok: Pid(2958)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/07e9b8d3/upper,workdir=/home/rocker/containers/07e9b8d3/merged"
10.27.84.0,10.27.84.1,10.27.84.3,ro_07e9b8d3_1,ro_07e9b8d3_2,ro_07e9b8d3_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:43 UTC 2024
启动用时: 442ms
Pid(2958) exit: Exited(Pid(2958), 0)
clone ok: Pid(2991)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/ebe8e61e/upper,workdir=/home/rocker/containers/ebe8e61e/merged"
10.208.41.0,10.208.41.1,10.208.41.3,ro_ebe8e61e_1,ro_ebe8e61e_2,ro_ebe8e61e_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:43 UTC 2024
启动用时: 508ms
Pid(2991) exit: Exited(Pid(2991), 0)
clone ok: Pid(3024)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/24f0ffde/upper,workdir=/home/rocker/containers/24f0ffde/merged"
10.58.133.0,10.58.133.1,10.58.133.3,ro_24f0ffde_1,ro_24f0ffde_2,ro_24f0ffde_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:44 UTC 2024
启动用时: 620ms
Pid(3024) exit: Exited(Pid(3024), 0)
clone ok: Pid(3057)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/1300f1b0/upper,workdir=/home/rocker/containers/1300f1b0/merged"
10.226.251.0,10.226.251.1,10.226.251.3,ro_1300f1b0_1,ro_1300f1b0_2,ro_1300f1b0_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:45 UTC 2024
启动用时: 377ms
Pid(3057) exit: Exited(Pid(3057), 0)
clone ok: Pid(3090)
10.69.252.0,10.69.252.1,10.69.252.3,ro_9e891ecb_1,ro_9e891ecb_2,ro_9e891ecb_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/9e891ecb/upper,workdir=/home/rocker/containers/9e891ecb/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:45 UTC 2024
启动用时: 475ms
Pid(3090) exit: Exited(Pid(3090), 0)
clone ok: Pid(3123)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/002d9bf9/upper,workdir=/home/rocker/containers/002d9bf9/merged"
10.120.13.0,10.120.13.1,10.120.13.3,ro_002d9bf9_1,ro_002d9bf9_2,ro_002d9bf9_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:46 UTC 2024
启动用时: 492ms
Pid(3123) exit: Exited(Pid(3123), 0)
clone ok: Pid(3156)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/2c8745c3/upper,workdir=/home/rocker/containers/2c8745c3/merged"
10.251.224.0,10.251.224.1,10.251.224.3,ro_2c8745c3_1,ro_2c8745c3_2,ro_2c8745c3_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:46 UTC 2024
启动用时: 515ms
Pid(3156) exit: Exited(Pid(3156), 0)
clone ok: Pid(3189)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/9142fcdc/upper,workdir=/home/rocker/containers/9142fcdc/merged"
10.66.217.0,10.66.217.1,10.66.217.3,ro_9142fcdc_1,ro_9142fcdc_2,ro_9142fcdc_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:47 UTC 2024
启动用时: 563ms
Pid(3189) exit: Exited(Pid(3189), 0)
clone ok: Pid(3222)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/e6e73543/upper,workdir=/home/rocker/containers/e6e73543/merged"
10.190.88.0,10.190.88.1,10.190.88.3,ro_e6e73543_1,ro_e6e73543_2,ro_e6e73543_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:48 UTC 2024
启动用时: 512ms
Pid(3222) exit: Exited(Pid(3222), 0)
clone ok: Pid(3255)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/21ee50a6/upper,workdir=/home/rocker/containers/21ee50a6/merged"
10.13.215.0,10.13.215.1,10.13.215.3,ro_21ee50a6_1,ro_21ee50a6_2,ro_21ee50a6_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:48 UTC 2024
启动用时: 521ms
Pid(3255) exit: Exited(Pid(3255), 0)
clone ok: Pid(3288)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/e48e570e/upper,workdir=/home/rocker/containers/e48e570e/merged"
10.15.233.0,10.15.233.1,10.15.233.3,ro_e48e570e_1,ro_e48e570e_2,ro_e48e570e_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:49 UTC 2024
启动用时: 475ms
Pid(3288) exit: Exited(Pid(3288), 0)
clone ok: Pid(3321)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/5c2d8295/upper,workdir=/home/rocker/containers/5c2d8295/merged"
10.74.225.0,10.74.225.1,10.74.225.3,ro_5c2d8295_1,ro_5c2d8295_2,ro_5c2d8295_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:49 UTC 2024
启动用时: 294ms
Pid(3321) exit: Exited(Pid(3321), 0)
clone ok: Pid(3354)
10.84.36.0,10.84.36.1,10.84.36.3,ro_afeac42b_1,ro_afeac42b_2,ro_afeac42b_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/afeac42b/upper,workdir=/home/rocker/containers/afeac42b/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:50 UTC 2024
启动用时: 526ms
Pid(3354) exit: Exited(Pid(3354), 0)
clone ok: Pid(3387)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/e6e748bf/upper,workdir=/home/rocker/containers/e6e748bf/merged"
10.36.211.0,10.36.211.1,10.36.211.3,ro_e6e748bf_1,ro_e6e748bf_2,ro_e6e748bf_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:51 UTC 2024
启动用时: 519ms
Pid(3387) exit: Exited(Pid(3387), 0)
clone ok: Pid(3420)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/67a8123f/upper,workdir=/home/rocker/containers/67a8123f/merged"
10.37.116.0,10.37.116.1,10.37.116.3,ro_67a8123f_1,ro_67a8123f_2,ro_67a8123f_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:51 UTC 2024
启动用时: 535ms
Pid(3420) exit: Exited(Pid(3420), 0)
clone ok: Pid(3453)
10.84.228.0,10.84.228.1,10.84.228.3,ro_f05e5556_1,ro_f05e5556_2,ro_f05e5556_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/f05e5556/upper,workdir=/home/rocker/containers/f05e5556/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:52 UTC 2024
启动用时: 377ms
Pid(3453) exit: Exited(Pid(3453), 0)
clone ok: Pid(3486)
10.48.72.0,10.48.72.1,10.48.72.3,ro_f04dd225_1,ro_f04dd225_2,ro_f04dd225_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/f04dd225/upper,workdir=/home/rocker/containers/f04dd225/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:52 UTC 2024
启动用时: 518ms
Pid(3486) exit: Exited(Pid(3486), 0)
clone ok: Pid(3519)
10.172.213.0,10.172.213.1,10.172.213.3,ro_8cadde8e_1,ro_8cadde8e_2,ro_8cadde8e_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/8cadde8e/upper,workdir=/home/rocker/containers/8cadde8e/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:53 UTC 2024
启动用时: 503ms
Pid(3519) exit: Exited(Pid(3519), 0)
clone ok: Pid(3552)
10.80.0.0,10.80.0.1,10.80.0.3,ro_bf8cdb88_1,ro_bf8cdb88_2,ro_bf8cdb88_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/bf8cdb88/upper,workdir=/home/rocker/containers/bf8cdb88/merged"
容器文件系统创建完成
clone ok: Pid(3568)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/093c1f19/upper,workdir=/home/rocker/containers/093c1f19/merged"
10.89.140.0,10.89.140.1,10.89.140.3,ro_093c1f19_1,ro_093c1f19_2,ro_093c1f19_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:54 UTC 2024
启动用时: 221ms
Pid(3568) exit: Exited(Pid(3568), 0)
clone ok: Pid(3593)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/6179827e/upper,workdir=/home/rocker/containers/6179827e/merged"
10.44.164.0,10.44.164.1,10.44.164.3,ro_6179827e_1,ro_6179827e_2,ro_6179827e_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:55 UTC 2024
启动用时: 807ms
Pid(3593) exit: Exited(Pid(3593), 0)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/6b83b453/upper,workdir=/home/rocker/containers/6b83b453/merged"
clone ok: Pid(3649)
10.46.208.0,10.46.208.1,10.46.208.3,ro_6b83b453_1,ro_6b83b453_2,ro_6b83b453_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:56 UTC 2024
启动用时: 846ms
Pid(3649) exit: Exited(Pid(3649), 0)
clone ok: Pid(3692)
10.250.88.0,10.250.88.1,10.250.88.3,ro_c24f4ef6_1,ro_c24f4ef6_2,ro_c24f4ef6_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/c24f4ef6/upper,workdir=/home/rocker/containers/c24f4ef6/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:56 UTC 2024
启动用时: 619ms
Pid(3692) exit: Exited(Pid(3692), 0)
clone ok: Pid(3729)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/f7ced84a/upper,workdir=/home/rocker/containers/f7ced84a/merged"
10.105.50.0,10.105.50.1,10.105.50.3,ro_f7ced84a_1,ro_f7ced84a_2,ro_f7ced84a_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:57 UTC 2024
启动用时: 987ms
Pid(3729) exit: Exited(Pid(3729), 0)
clone ok: Pid(3764)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/d04f59ab/upper,workdir=/home/rocker/containers/d04f59ab/merged"
10.50.187.0,10.50.187.1,10.50.187.3,ro_d04f59ab_1,ro_d04f59ab_2,ro_d04f59ab_3
容器文件系统创建完成
clone ok: Pid(3770)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/1fb07eeb/upper,workdir=/home/rocker/containers/1fb07eeb/merged"
10.79.109.0,10.79.109.1,10.79.109.3,ro_1fb07eeb_1,ro_1fb07eeb_2,ro_1fb07eeb_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:58 UTC 2024
启动用时: 249ms
Pid(3770) exit: Exited(Pid(3770), 0)
clone ok: Pid(3806)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/e6fde771/upper,workdir=/home/rocker/containers/e6fde771/merged"
10.149.254.0,10.149.254.1,10.149.254.3,ro_e6fde771_1,ro_e6fde771_2,ro_e6fde771_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:43:59 UTC 2024
启动用时: 609ms
Pid(3806) exit: Exited(Pid(3806), 0)
clone ok: Pid(3839)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/48bb03e4/upper,workdir=/home/rocker/containers/48bb03e4/merged"
10.120.228.0,10.120.228.1,10.120.228.3,ro_48bb03e4_1,ro_48bb03e4_2,ro_48bb03e4_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:44:00 UTC 2024
启动用时: 499ms
Pid(3839) exit: Exited(Pid(3839), 0)
clone ok: Pid(3887)
10.71.60.0,10.71.60.1,10.71.60.3,ro_f1405d92_1,ro_f1405d92_2,ro_f1405d92_3
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/f1405d92/upper,workdir=/home/rocker/containers/f1405d92/merged"
容器文件系统创建完成
create_network success
Sat Aug 10 06:44:00 UTC 2024
启动用时: 487ms
Pid(3887) exit: Exited(Pid(3887), 0)
clone ok: Pid(3920)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/6d64ac98/upper,workdir=/home/rocker/containers/6d64ac98/merged"
10.204.39.0,10.204.39.1,10.204.39.3,ro_6d64ac98_1,ro_6d64ac98_2,ro_6d64ac98_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:44:01 UTC 2024
启动用时: 770ms
Pid(3920) exit: Exited(Pid(3920), 0)
clone ok: Pid(3963)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/6ec7154f/upper,workdir=/home/rocker/containers/6ec7154f/merged"
10.64.80.0,10.64.80.1,10.64.80.3,ro_6ec7154f_1,ro_6ec7154f_2,ro_6ec7154f_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:44:02 UTC 2024
启动用时: 556ms
Pid(3963) exit: Exited(Pid(3963), 0)
clone ok: Pid(3996)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/2debe50b/upper,workdir=/home/rocker/containers/2debe50b/merged"
10.129.22.0,10.129.22.1,10.129.22.3,ro_2debe50b_1,ro_2debe50b_2,ro_2debe50b_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:44:02 UTC 2024
启动用时: 363ms
Pid(3996) exit: Exited(Pid(3996), 0)
clone ok: Pid(4029)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/5062e991/upper,workdir=/home/rocker/containers/5062e991/merged"
10.34.167.0,10.34.167.1,10.34.167.3,ro_5062e991_1,ro_5062e991_2,ro_5062e991_3
容器文件系统创建完成
create_network success
Sat Aug 10 06:44:03 UTC 2024
启动用时: 609ms
Pid(4029) exit: Exited(Pid(4029), 0)
clone ok: Pid(4060)
dirs: "lowerdir=/home/rocker/volumes/busybox,upperdir=/home/rocker/containers/f240853a/upper,workdir=/home/rocker/containers/f240853a/merged"
10.185.55.0,10.185.55.1,10.185.55.3,ro_f240853a_1,ro_f240853a_2,ro_f240853a_3
容器文件系统创建完成

@ -0,0 +1,5 @@
while true; do
# 两个线程
sudo ./target/release/rocker --image busybox --run "/bin/date" --wait
done
Loading…
Cancel
Save