如何獲得Docker容器進程的ID?

如何獲得Docker容器進程的ID?

開始之前

在某些情況下,比如系統負載很高 docker stop 無法關閉某個容器(無響應),這時可以根據容器進程的ID找到宿主機進程ID,然後kill掉這個容器(最好已經使用了數據卷數據持久化,否則容器內數據有丟失風險)。

操作步驟

  1. 列出當前容器
docker ps --format '{{.ID}} {{ .Names }}'

CONTAINER ID    NAMES
1201281cb959    web
425a6234df74    db
  1. 獲得容器進程ID
docker inspect -f '{{ .State.Pid }}' web
9834
  1. 進程信息
tail /proc/9834/cmdline ;echo 
nginx: master process nginx -g daemon off;
  1. 也可以使用top子命令
docker top web
  1. 最後如有必要可以kill這個進程ID,這等效於強制關閉容器。
kill -9 9834

Docker 容器進程

內容摘自 <<Docker — 從入門到實踐>>
鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。

容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。因此容器可以擁有自己的 root文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶 ID空間。

容器內的進程是運行在一個隔離的環境裏,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。

小結

最後來總結下文章中的知識點

  • Docker容器本質上是宿主機上的進程。
  • 容器進程ID就是宿主機進程ID,因爲它們是相同的。
  • 如果Docker守護進程正常響應,請不要直接kill進程。

參考文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章