GNU/Linux >> Linux の 問題 >  >> Linux

Docker コンテナー内で実行されているプロセスの、ホストの PID は何ですか?

ホスト pid またはコンテナー pid のいずれかがわかっている場合は、次のようにホスト上のすべての NSpid マップを検索して見つけることができます:

# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
  • 1194200 はホスト pid です
  • 10061 はコンテナの pid です

2>/dev/null は、次のような grep エラーを引き起こす短命のプロセスを無視することです:grep:/proc/1588467/status:No such file or directory


/proc/<pid>/status を見ることができます ファイルを使用して、名前空間 PID とグローバル PID の間のマッピングを決定します。たとえば、docker コンテナーで複数の sleep 900 を開始した場合 次のようなプロセス:

# docker run --rm -it alpine sh
/ # sleep 900 &
/ # sleep 900 &
/ # sleep 900 &

コンテナー内で実行されていることがわかります:

/ # ps -fe
PID   USER     TIME   COMMAND
    1 root       0:00 sh
    7 root       0:00 sleep 900
    8 root       0:00 sleep 900
    9 root       0:00 sleep 900
   10 root       0:00 ps -fe

ホストでこれらを確認できます:

# ps -fe | grep sleep
root     10394 10366  0 09:11 pts/10   00:00:00 sleep 900
root     10397 10366  0 09:12 pts/10   00:00:00 sleep 900
root     10398 10366  0 09:12 pts/10   00:00:00 sleep 900

そして、それらのいずれについても、status を見ることができます。 名前空間 pid を確認するためのファイル:

# grep -i pid /proc/10394/status
Pid:    10394
PPid:   10366
TracerPid:  0
NSpid:  10394   7

NSpid を見ると 行、PID 名前空間内でこのプロセスが pid 7 であることを確認できます。実際、プロセス 10394 を強制終了すると、 ホスト上:

# kill 10394

その後、コンテナで PID 7 が実行されていないことがわかります:

/ # ps -fe
PID   USER     TIME   COMMAND
    1 root       0:00 sh
    8 root       0:00 sleep 900
    9 root       0:00 sleep 900
   11 root       0:00 ps -fe

Linux
  1. ホスト ポートを Docker コンテナに転送する

  2. プロセスが lxc/Docker 内で実行されているかどうかを判断する方法は?

  3. Docker イメージ/コンテナの中身は?

  1. Ubuntu で docker を実行中:マウントされたホスト ボリュームはコンテナーから書き込み可能ではありません

  2. Docker Alpine コンテナーでのシェルの開始

  3. Linuxでのセッションの定義は何ですか?

  1. プロセスが実行されている特定のプロセッサを特定する

  2. Unixで実行中のプロセスの環境変数?

  3. Docker コンテナーで実行されている OS はどれですか?