一、作用场景及知识点

  1. 使用场景(SSH方式除外):

    A. 运行在Docker容器里面的程序,怎么采集宿主机的CPU、内存、磁盘等信息;

    B. 容器内更改宿主机的网卡信息,怎么操作宿主机执行命令;

    C. 容器内命令不足,如telnet调试端口,怎么利用宿主机的工具命令。

  2. 知识点介绍

    A. Docker和宿主机共用一个内核,Namespace的隔离依然没有完全隔离Linux资源,如:/proc、/sys、/dev/sd*等目录;

    B. 使用Docker问题:在Docker容器中执行top、free命令,看到的资源情况是宿主机的资源消耗比例,而不是这个容器被限制了多少CPU、内存;

    C. 设置容器特权级运行:--privileged,比如容器内操作内核模块、挂载USB磁盘、修改MAC地址等,设置privileged=true即可;

    D. 设置容器特权白名单:--cap-add,privileged=true等同于cap-add=ALL,其权限非常大,接近于宿主机的权限,为了防止用户的滥用,需要增加权限限制,只提供给容器必须的权限。

二、实际应用

  1. Docker容器操作宿主机命令

    A. 修改Docker Compose配置文件

      pid=host,使用宿主机命名空间,方便容器获取到宿主机所有进程信息,其中/proc/1作为nsenter的目标;

      privileged=true,使得docker容器有root权限执行宿主机命令,确保从容器执行命令时不会报权限不足提示;

    B. nsenter执行宿主机命令查看IP信息:nsenter -n -t 1 ip addr

      nsenter命令是一个可以在指定进程的命令空间下运行指定程序的命令,位于util-linux包中,格式:nsenter -a -t <pid> <command> 或者nsenter -m -u -i -n -p -t <pid> <command> ;

      -a表示进入宿主机的所有命名空间,linux旧版本可能不支持,需要替换为-m -u -i -n -p、-m表示进入mount命令空间、-u表示进入uts命令空间、-i表示进入ipc命令空间、-n表示进入net命令空间、-p表示进入pid命令空间、-U表示进入user命令空间、-t表示被进入命名空间的目标进程的pid;

      可以先输入nsenter -n -t 1进入1空间,然后输入ip addr命令,最后执行exit退出。

  2. Docker容器权限(nsenter -m -u -i -n -p -t 1)

    A. 配置SYS_ADMIN,否则报错:

    B. 配置SYS_PTRACE,否则报错: 

  3. nsenter命令安装

FROM baseImage
RUN apk add util-linux --no-cache

Docker容器 获取宿主机CPU信息等或重启网卡命令操作介绍的更多相关文章

  1. 判断runtime是否运行在docker中及从docker中获取宿主机的ip信息

    1.判断运行时环境是否运行在docker中 参考:How to determine if a process runs inside lxc/Docker? 确定进程是否在LXC/Docker中运行? ...

  2. docker容器访问宿主机的IP——以rocketmq管理工具为例

    在宿主机(MacOS系统)上运行了原生的RocketMQ服务,为了方便管理,需要以Docker方式运行RocketMQ的管理工具——rocketmq-console (项目地址:https://git ...

  3. docker-compose 快速部署Prometheus,监控docker 容器, 宿主机,ceph -- cluster集群

    话不多说上菜: 现在环境是这样: ceph 4台: 192.168.100.21  ceph-node1 192.168.100.22  ceph-node2 192.168.100.23  ceph ...

  4. docker容器访问宿主机IP

    宿主机执行ifconfig 会看到docker0那个ip,可以使用来访问宿主机

  5. Docker容器的跨主机连接

    Docker容器的跨主机连接 Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态I ...

  6. 用python实现批量获取Linux主机简要信息并保存到Excel中 unstable 1.1

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- #filename get_linux_info.py #获取Linux主机的信息 # titles=[' ...

  7. 关于docker容器访问的主机的端口问题

    docker容器需要访问主机的,不能使用127.0.0.1,127.0.0.1访问的是docker容器不是主机: docker容器创建时会分配一个主机ip,可在主机使用命令 docker inspec ...

  8. Docker学习(15) Docker容器的跨主机连接

    Docker容器的跨主机连接 Docker使用网桥跨主机容器连接 Docker使用Open cSwitch实现跨主机容器连接 Docker使用weave实现跨主机容器连接

  9. Docker容器获取宿主机信息

    最近在做产品授权的东西,开始宿主机为Window,程序获取机器硬件信息相对简单些,后来部署时发现各种各样的的环境问题,所有后来改用dokcer部署,docker方式获取宿主机信息时花了些时间,特此记录 ...

  10. 从容器中获取宿主机IP地址

    背景: docker 中的程序需要连接外部的程序,连接的过程中会告知外部程序自己的ip地址,然后外部的程序会回连docker中的程序.由于docker使用的是rancher中的托管模式,外部程序是没办 ...

随机推荐

  1. springboot集成xxl-job问题

    Client-error:unknown code for readObject at 0x3c (<) 原因之一是classNotFoundRxception :com.caucho.hess ...

  2. tkinter的after函数的使用方法

    1,模块tkinter里面没有aften函数,aften是部分类的类方法. import tkinter l = dir(tkinter) for s in l: if 'after' in eval ...

  3. nextLine和hasNextLine的区别

    == 重点:如果要判断一个文件这一行是否还有可读数据不能通过nextLine != null 来判断,要用hasNextLine是否为真来判断. == 1.nextLine: 公共字符串nextLin ...

  4. 路飞前台全局css 全局配置文件,安装axios,安装vue-cookies,安装elementui,安装bootstrap和jq,后台主页模块表设计,后台主页模块轮播图接口,录入数据,跨域问题详解

    目录 路飞前台全局css 全局配置文件,安装axios,安装vue-cookies,安装elementui,安装bootstrap和jq,后台主页模块表设计,后台主页模块轮播图接口,录入数据,跨域问题 ...

  5. 是时候开始写总结了-今日总结-vue单页面制作

    今天哥给了我一个页面,让做出类似的. <h2>就直接说下页面用到的知识点吧</h2> 首先说下该页面使用的是vue2+less  直接写 导入模块时就只导入了cnpm i  l ...

  6. M1 安装apache tomcat

    一.下载以及安装 1.Tomcat(官网:http://tomcat.apache.org/) 2.找到需要的版本:我用的9版本 二.将下载的文件放在自己一个目录下去 三.设置Apache环境路径 e ...

  7. 用H5 Canvas绘制一个仪表盘笔记

    前端有许多做数据可视化的图表插件,但有时候UI设计的图可能用现成的js插件无法定制或者比较麻烦(还不如自己造轮子来的快). 下面记录下用H5 canvas设计一个仪表盘代码: <!DOCTYPE ...

  8. vscode将本地代码实时同步到服务器

    vscode近些年变得越来越流行了,主要是IDEA用上去实在有点卡,机器卡崩溃几次,这段时间也想用vscode体验一下,在自己的一些项目上面,想实现像phpstorm或者goland那样直接把代码通过 ...

  9. 【C和指针】6.指针

    1.指针变量的内容 int a=112, b=-1; float c=3.14; int *d=&a; int *e=&c; (1) 变量d和e被声明为指针,并用其他变量的地址予以初始 ...

  10. k8s心得

    k8s的 Service 记录了发布后服务的基本信息,如 ip,端口