Docker容器 获取宿主机CPU信息等或重启网卡命令操作介绍
一、作用场景及知识点
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信息等或重启网卡命令操作介绍的更多相关文章
- 判断runtime是否运行在docker中及从docker中获取宿主机的ip信息
1.判断运行时环境是否运行在docker中 参考:How to determine if a process runs inside lxc/Docker? 确定进程是否在LXC/Docker中运行? ...
- docker容器访问宿主机的IP——以rocketmq管理工具为例
在宿主机(MacOS系统)上运行了原生的RocketMQ服务,为了方便管理,需要以Docker方式运行RocketMQ的管理工具——rocketmq-console (项目地址:https://git ...
- 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 ...
- docker容器访问宿主机IP
宿主机执行ifconfig 会看到docker0那个ip,可以使用来访问宿主机
- Docker容器的跨主机连接
Docker容器的跨主机连接 Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态I ...
- 用python实现批量获取Linux主机简要信息并保存到Excel中 unstable 1.1
#!/usr/bin/env python3 # -*- coding: utf-8 -*- #filename get_linux_info.py #获取Linux主机的信息 # titles=[' ...
- 关于docker容器访问的主机的端口问题
docker容器需要访问主机的,不能使用127.0.0.1,127.0.0.1访问的是docker容器不是主机: docker容器创建时会分配一个主机ip,可在主机使用命令 docker inspec ...
- Docker学习(15) Docker容器的跨主机连接
Docker容器的跨主机连接 Docker使用网桥跨主机容器连接 Docker使用Open cSwitch实现跨主机容器连接 Docker使用weave实现跨主机容器连接
- Docker容器获取宿主机信息
最近在做产品授权的东西,开始宿主机为Window,程序获取机器硬件信息相对简单些,后来部署时发现各种各样的的环境问题,所有后来改用dokcer部署,docker方式获取宿主机信息时花了些时间,特此记录 ...
- 从容器中获取宿主机IP地址
背景: docker 中的程序需要连接外部的程序,连接的过程中会告知外部程序自己的ip地址,然后外部的程序会回连docker中的程序.由于docker使用的是rancher中的托管模式,外部程序是没办 ...
随机推荐
- springboot集成xxl-job问题
Client-error:unknown code for readObject at 0x3c (<) 原因之一是classNotFoundRxception :com.caucho.hess ...
- tkinter的after函数的使用方法
1,模块tkinter里面没有aften函数,aften是部分类的类方法. import tkinter l = dir(tkinter) for s in l: if 'after' in eval ...
- nextLine和hasNextLine的区别
== 重点:如果要判断一个文件这一行是否还有可读数据不能通过nextLine != null 来判断,要用hasNextLine是否为真来判断. == 1.nextLine: 公共字符串nextLin ...
- 路飞前台全局css 全局配置文件,安装axios,安装vue-cookies,安装elementui,安装bootstrap和jq,后台主页模块表设计,后台主页模块轮播图接口,录入数据,跨域问题详解
目录 路飞前台全局css 全局配置文件,安装axios,安装vue-cookies,安装elementui,安装bootstrap和jq,后台主页模块表设计,后台主页模块轮播图接口,录入数据,跨域问题 ...
- 是时候开始写总结了-今日总结-vue单页面制作
今天哥给了我一个页面,让做出类似的. <h2>就直接说下页面用到的知识点吧</h2> 首先说下该页面使用的是vue2+less 直接写 导入模块时就只导入了cnpm i l ...
- M1 安装apache tomcat
一.下载以及安装 1.Tomcat(官网:http://tomcat.apache.org/) 2.找到需要的版本:我用的9版本 二.将下载的文件放在自己一个目录下去 三.设置Apache环境路径 e ...
- 用H5 Canvas绘制一个仪表盘笔记
前端有许多做数据可视化的图表插件,但有时候UI设计的图可能用现成的js插件无法定制或者比较麻烦(还不如自己造轮子来的快). 下面记录下用H5 canvas设计一个仪表盘代码: <!DOCTYPE ...
- vscode将本地代码实时同步到服务器
vscode近些年变得越来越流行了,主要是IDEA用上去实在有点卡,机器卡崩溃几次,这段时间也想用vscode体验一下,在自己的一些项目上面,想实现像phpstorm或者goland那样直接把代码通过 ...
- 【C和指针】6.指针
1.指针变量的内容 int a=112, b=-1; float c=3.14; int *d=&a; int *e=&c; (1) 变量d和e被声明为指针,并用其他变量的地址予以初始 ...
- k8s心得
k8s的 Service 记录了发布后服务的基本信息,如 ip,端口