Docker容器内部获取宿主机CPU、磁盘、网卡等信息

目录

使用挂载宿主机目录方式获取宿主机信息

在启动容器的时候,挂载/proc/目录到指定目录,注意容器容也有proc目录,容器中不可再用/proc目录,然后根据cpuinfo或者其他文件自己提取数据再算出来

将/proc目录挂载到容器的/hostinfo/proc目录,然后读取文件来提取信息

/** 系统信息
 * @return array
 */
public function info(){
    //cpu(通过挂载宿主机/proc 至 /hostinfo/proc)
    $cpu_info = shell_exec("grep -m 1 'model name' /hostinfo/proc/cpuinfo");
    $cpu_name = str_replace(["model name\t: ","\n"],'',$cpu_info);

    //内存(通过挂载宿主机/proc 至 /hostinfo/proc)
    $mem_free_info = shell_exec("grep MemFree /hostinfo/proc/meminfo");
    preg_match('/[1-9]+/', $mem_free_info, $match);
    $mem_free           = ceil(Arr::get($match, 0));
    $mem_available_info = shell_exec("grep MemAvailable /hostinfo/proc/meminfo");
    preg_match('/[1-9]+/', $mem_available_info, $match3);
    $mem_available  = ceil(Arr::get($match3, 0));
    $mem_total_info = shell_exec("grep MemTotal /hostinfo/proc/meminfo");
    preg_match('/[1-9]+/', $mem_total_info, $match2);
    $mem_total = ceil(Arr::get($match2, 0));
    $mem_used  = $mem_total - $mem_free - $mem_available;
    $mem_info  = [
        'total'   => $mem_total . 'kB',
        'use'     => $mem_used . 'kB',
        'percent' => ($mem_total > 0) ? (round(($mem_used / $mem_total), 3) * 100) . '%' : '0%',
    ];

    //磁盘(通过挂载宿主机的定时刷新文件获取硬盘信息)
    $disk      = file_get_contents(dirname(dirname(app_path())) . '/diskinfo');
    $disk      = explode("\n", $disk);
    $disk      = array_shift($disk);
    $disk_arr  = explode(',', trim($disk, "\n"));
    $disk_info = [
        'total'   => Arr::get($disk_arr, 0),
        'use'     => Arr::get($disk_arr, 1),
        'percent' => Arr::get($disk_arr, 3),
    ];
    $data = [
        'cpu_info' => [
            'name'    => $cpu_name,
            'percent' => $this->getCpuPercent(),
        ],
        $mem_info,
        $disk_info
    ];
    return [200,'success',$data];
}

在容器中使用ssh连接到主机获取主机信息
// An highlighted block
# apk update   //进入容器后首先更新
# apk add openssh-client   //安装ssh客户端,只需要客户端就可以连接其他主机,不需要安装server
# apk add sshpass    //安装sshpass,ssh不能指定登录密码,需要sshpass协助
# sshpass -p "123456" ssh root@192.168.0.61 "df -h"  //-p后面是ssh登录密码,“df -h“是需要执行的命令
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G   11G   40G   21% /
devtmpfs                 3.8G     0  3.8G    0% /dev
tmpfs                    3.8G     0  3.8G    0% /dev/shm
tmpfs                    3.8G  9.4M  3.8G    1% /run
tmpfs                    3.8G     0  3.8G    0% /sys/fs/cgroup
/dev/sda1               1014M  146M  869M   15% /boot
/dev/mapper/centos-home  407G   56G  352G   14% /home
tmpfs                    775M     0  775M    0% /run/user/0
overlay                  407G   56G  352G   14% /home/docker_data/overlay2/8ed720bb28e71a9551d0571ded60cddcd469f61bd95b5f9b9a0a2e20e40ec6fa/merged
shm                       64M     0   64M    0% /home/docker_data/containers/47a4d4dbe861507477ee11a5e65e9c073d2a2e336e63f5626de15c2fbf06160f/mounts/shm
overlay                  407G   56G  352G   14% /home/docker_data/overlay2/3d994d13d288265c90f7aabc4d311db50ee8b53228ee2635ca43035e8ac41b7e/merged
shm                       64M     0   64M    0% /home/docker_data/containers/185f01c2ad42b84a411b0c36e1d6f36ef94febb3ce0dfed0794a5f039a56ae98/mounts/shm
overlay                  407G   56G  352G   14% /home/docker_data/overlay2/43a4cc3ef35ebe63fa79f7155e0ab50cb9b11aa452d11eb4377f1ab35175c8d9/merged
shm                       64M     0   64M    0% /home/docker_data/containers/66d9f7dd4c73454d0c46197e2bbd55a6bda5bff354f1b2a9eff78abbe678652e/mounts/shm
overlay                  407G   56G  352G   14% /home/docker_data/overlay2/068c6c7e432c1a234ef7e0dd6dc2e1bf4bdcf666be6e081cdde2cbe085a0c217/merged
shm                       64M     0   64M    0% /home/docker_data/containers/5e46d1659245ef3a8c6c59a35cbcbd2cfeb4c4b432d5391721fd6aabc835339d/mounts/shm
overlay                  407G   56G  352G   14% /home/docker_data/overlay2/2c5ebdd0afcc4b97fb159f81dd6adf753a5c3523b4ac4f59485c6a8105da06b6/merged
shm                       64M     0   64M    0% /home/docker_data/containers/d7661a53104d6862e94e51df70fb6b80e4c22fe8e5952fd38e4727628d565299/mounts/shm