Dockerコンテナ側からホスト側のプロセスを確認する
はじめに
Dockerコンテナ側からホストのプロセスを確認したいということがあったのでメモ書き。
環境
|
|
構築
Dockerfile
|
|
プロセスを確認するのみなので、ベースイメージはalpine
を選定した。ps
コマンドを使えるようにするには、procps
パッケージを入れる必要があるため入れる。
compose.yml
|
|
stdin_open: true
, tty: true
については、シェルを起動させるために必要な設定。
大事なのはpid: host
、これでホスト側とPID名前空間を共有できるようだ。
試す
pid:host ありの場合
compose.yml
, Dockerfile
を同じ階層に配置し、下記コマンドを実行する。
|
|
コンテナが起動したら、monitor
コンテナに入る。
|
|
コンテナで ps aux
を実行する。
|
|
PID:1
の init
プロセスが確認できる。
WSL2 の プロセスが見えている。
|
|
pid:host なしの場合
同じようにコンテナをビルドして ps aux
をコンテナ内で実行する。
|
|
|
|
こちらでは、PID名前空間を共有していないのでコンテナ内のプロセスしか見られない。
参考
4.2.3 ホストのプロセスIDネームスペースへのアクセス
https://docs.oracle.com/cd/E39368_01/E75728/html/section_tjh_wj2_mr.htmldocker run コマンドの –pid オプションで PID namespace を共有する
https://kakakakakku.hatenablog.com/entry/2021/07/19/001536【2024年01月版】 /proc メモ 【中年エンジニアのためのLinuxメモ】
https://qiita.com/nouernet/items/6a40cd3c03ebe058ab39docker-compose.yml個人的Tips集
https://qiita.com/yuki_0920/items/dc3f32667d004979cc5a#stdin_open-true%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8BDocker run リファレンス pid設定
https://docs.docker.jp/engine/reference/run.html#pid-pid
おわりに
コンテナ側とホスト側のプロセスを共有する形になるので、コンテナ側でホストのプロセスをkillすることもできる。
コンテナセキュリティ的にどういうところに気を付けたほうが良いのかとかも考えておきたい。