最近看了這篇文章:Understanding how uid and gid work in Docker containers,瞭解到:html
讓咱們來驗證這兩點。mysql
在個人Ubuntu上沒有安裝、更沒有運行mysql,可是我經過docker啓動了一個mysql容器。此時,我可以經過在宿主機器上的命令行ps aux | grep mysql
看到mysql的進程:sql
咱們能在宿主機器上看到mysqld
建立的進程,驗證了第一點。docker
如今咱們驗證一下【在宿主機器上的進程擁有者uid、gid】是否是等於【在容器內的進程擁有者uid、gid】。ubuntu
在上面的ps aux | grep mysql
輸出中,顯示進程ID是25138,【容器進程擁有者的用戶名】是guest-v+
,看不到uid。而且,咱們沒法經過id guest-v+
查看用戶信息,由於這個用戶名是虛擬的。segmentfault
在搜索一番之後,我發現ps命令很是強大,幾乎能給你全部須要的進程信息!設置幾個參數就能讓它輸出咱們想要的進程信息:bash
ps --pid 25138 -O uid,uname,gid,group,ppid
上面的參數表示,我要查看pid爲25138的進程,而且除了默認的列之外,多展現幾列:uid,uname,gid,group,ppid。
輸出以下:
終於找到了!【在宿主機器上的進程擁有者uid】是999,groupid也是999。(PPID(parent pid)展現了父進程的pid,有了它,你能夠繼續查看父進程的信息)ui
在 ps manuals中,能找到這個命令的更多用法、更多能夠展現的列:
![]()
接下來,讓咱們查看【在容器內的進程擁有者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。spa
【在宿主機器上的進程擁有者uid】和【在容器內的進程擁有者uid】都是999,gid同理,咱們已經驗證了第二點。命令行