やりたいこと
例えば以下のようなnetstatコマンドが打てないコンテナにて
> docker run -t -i ubuntu root@652f2bab700c:/# netstat bash: netstat: command not found
同コマンドが打てるようにする。
環境情報
- Docker Version:19.03.5
やり方
接続したいコンテナIDを--pid=container
&--net=container
で指定してデバッグツールをインストール済のコンテナを起動する。
> docker run -t -i --pid=container:652f2bab700c --net=container:652f2bab700c busybox sh
/ # which netstat /bin/netstat
以下、補足です。
補足
以下記事ではapt-get install
で該当コマンドをインストールできますが
今回はサイドカーという手法でコマンドを利用可能にしました。
Dockerのベストプラクティスとして不要なファイルはイメージに配置しないものの、PD時には解析用コマンドを打ちたくなります。そのような場合には上で挙げたようにPID名前空間とネットワークを共有することで既存コンテナの中でコマンドを打つことができます。
ホスト名を確認すれば冒頭の既存コンテナに接続できていることが確認でき
/ # hostname 652f2bab700c
解析が終わればコンテナを消すことでイメージ量が増大せずに解析が可能となります。
以上、ご参考になれば幸いです。