ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

【docker】小技巧:在宿主机器上直接查看docker容器的进程

2021-08-08 18:03:08  阅读:331  来源: 互联网

标签:容器 宿主 uid gid 拥有者 进程 docker


转载自:https://blog.csdn.net/weixin_34123613/article/details/88811722

 

最近看了这篇文章:Understanding how uid and gid work in Docker containers,了解到:

  1. docker容器内的一个进程对应于宿主机器上的一个进程。
  2. 容器内的进程,与相对应的宿主进程,由相同的uid、gid拥有。也就是说,如果在容器内主进程属于用户uid=1000,那么这个容器进程在宿主机器上也属于用户uid=1000。容器内的用户uid=1000就是容器外的用户uid=1000,也是其他容器内的用户uid=1000。上面链接的文章介绍了很多这样的例子。

让我们来验证这两点。

docker容器内的一个进程对应于宿主机器上的一个进程

在我的Ubuntu上没有安装、更没有运行mysql,但是我通过docker启动了一个mysql容器。此时,我能够通过在宿主机器上的命令行ps aux | grep mysql看到mysql的进程:


我们能在宿主机器上看到mysqld创建的进程,验证了第一点。

容器内的进程,与相对应的宿主进程,由相同的uid、gid拥有

现在我们验证一下【在宿主机器上的进程拥有者uid、gid】是不是等于【在容器内的进程拥有者uid、gid】。

在宿主机器上的进程拥有者uid、gid

在上面的ps aux | grep mysql输出中,显示进程ID是25138,【容器进程拥有者的用户名】是guest-v+,看不到uid。并且,我们无法通过id guest-v+查看用户信息,因为这个用户名是虚拟的。

在搜索一番以后,我发现ps命令非常强大,几乎能给你所有需要的进程信息!设置几个参数就能让它输出我们想要的进程信息:

ps --pid 25138 -O uid,uname,gid,group,ppid

上面的参数表示,我要查看pid为25138的进程,并且除了默认的列以外,多展示几列:uid,uname,gid,group,ppid。
输出如下:

终于找到了!【在宿主机器上的进程拥有者uid】是999,groupid也是999。(PPID(parent pid)展示了父进程的pid,有了它,你可以继续查看父进程的信息)

在 ps manuals中,能找到这个命令的更多用法、更多可以展示的列:
clipboard.png

在容器内的进程拥有者uid、gid

接下来,让我们查看【在容器内的进程拥有者uid】。
通过docker exec -it 容器名称 bash,在容器内运行一个bash。
根据我之前的博客,执行apt-get update && apt-get install procps,在容器内安装ps(大部分容器为了精简,没有预装ps)。
使用ps ax -O uid,uname,gid,group,ppid,查看容器内的所有进程:

可以看到,在容器内,msqld进程的拥有者uid也是999,groupid也是999。

【在宿主机器上的进程拥有者uid】和【在容器内的进程拥有者uid】都是999,gid同理,我们已经验证了第二点。

标签:容器,宿主,uid,gid,拥有者,进程,docker
来源: https://www.cnblogs.com/lxhbky/p/15115550.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有