Skip to main content

nuwax_cli/docker_service/
mod.rs

1use std::sync::Arc;
2
3use anyhow::Result;
4use client_core::config::AppConfig;
5use client_core::container::DockerManager;
6
7// 子模块声明
8pub mod architecture;
9pub mod config;
10pub mod directory_permissions;
11pub mod environment;
12pub mod error;
13pub mod health_check;
14pub mod image_loader;
15pub mod manager;
16pub mod port_manager;
17pub mod script_permissions;
18pub mod service_manager;
19
20// 公共接口导出
21pub use architecture::{Architecture, detect_architecture};
22#[allow(unused_imports)]
23pub use config::DockerServiceConfig;
24#[allow(unused_imports)]
25pub use environment::EnvironmentChecker;
26#[allow(unused_imports)]
27pub use error::{DockerServiceError, DockerServiceResult};
28#[allow(unused_imports)]
29pub use health_check::{ContainerStatus, HealthReport, ServiceStatus};
30#[allow(unused_imports)]
31pub use image_loader::{ImageInfo, ImageLoader, ImageType, LoadResult, TagResult};
32pub use manager::DockerServiceManager;
33#[allow(unused_imports)]
34pub use port_manager::{PortConflict, PortConflictReport, PortManager, PortMapping};
35#[allow(unused_imports)]
36pub use service_manager::ServiceManager;
37
38/// Docker 服务管理的主要入口点
39pub struct DockerService;
40
41impl DockerService {
42    /// 创建 Docker 服务管理器实例
43    #[allow(clippy::new_ret_no_self)]
44    pub fn new(
45        config: Arc<AppConfig>,
46        docker_manager: Arc<DockerManager>,
47    ) -> Result<DockerServiceManager> {
48        let work_dir = docker_manager
49            .get_working_directory()
50            .ok_or_else(|| anyhow::anyhow!("Unable to determine Docker working directory"))?
51            .to_path_buf();
52
53        Ok(DockerServiceManager::new(
54            config,
55            docker_manager.clone(),
56            work_dir,
57        ))
58    }
59}
60
61/// 便捷函数:检测系统架构
62pub fn get_system_architecture() -> Architecture {
63    detect_architecture()
64}
65
66/// 便捷函数:获取架构对应的镜像后缀
67pub fn get_architecture_suffix(arch: Architecture) -> &'static str {
68    match arch {
69        Architecture::Amd64 => "amd64",
70        Architecture::Arm64 => "arm64",
71    }
72}