1. ホーム
  2. linux

[解決済み】Dockerコンテナのファイルシステムを調査する

2022-03-23 03:45:15

質問

dockerを使っていて気づいたのですが、コンテナの中で何が起こっているのか、どんなファイルが存在するのかを理解する必要があります。その一例が、docker インデックスからのイメージのダウンロードです。イメージに何が含まれているか分からないので、アプリケーションを起動することができません。

理想的なのは、そこにsshで入るか、それに準ずることができるようになることです。これを行うためのツールはあるのでしょうか。それとも、これができるはずだという私のドッカーに対する概念が間違っているのでしょうか。

解決方法は?

いくつかの方法を紹介しますと...

A) docker execを使用する (最も簡単)

Docker バージョン 1.3 以降では、以下のコマンドをサポートしています。 exec と同じような動作をする nsenter . このコマンドは、すでに実行中のコンテナで新しいプロセスを実行することができます(コンテナは、すでに実行中のPID 1プロセスを持っている必要があります)。このコマンドで実行できるのは /bin/bash を使用して、コンテナの状態を調べることができます。

docker exec -t -i mycontainer /bin/bash

見る Dockerコマンドラインドキュメント

B) スナップショットを利用する

この方法でコンテナファイルシステムを評価することができます。

# find ID of your running container:
docker ps

# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot

# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash

この方法で、実行中のコンテナのファイルシステムを正確なタイミングで評価することができます。コンテナはまだ実行中であり、将来の変更は含まれません。

後でスナップショットを使用して削除することができます(実行中のコンテナのファイルシステムには影響しません!)。

docker rmi mysnapshot

C) sshを使用する

継続的なアクセスが必要な場合は、コンテナにsshdをインストールし、sshdデーモンを実行することができます。

 docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
 
 # you need to find out which port to connect:
 docker ps

こうすることで、sshを使ってアプリを実行することができます(接続して好きなものを実行する)。

D) nsenterを使用する

使用方法 nsenter を参照してください。 DockerコンテナでSSHdを実行する必要がない理由

<ブロッククオート

簡単に説明すると、nsenterを使うと、シェルを 既存のコンテナで、SSHやその他の種類のコンテナが動作していなくても 特殊用途のデーモン