Docker では、コンテナ内で何が起こっているのか、またはそこにどのようなファイルが存在するのかを理解する必要があることに気付きました。1 つの例は、Docker インデックスからイメージをダウンロードすることです。イメージに何が含まれているのかがわからないため、アプリケーションを起動することはできません。
理想的なのは、それらに SSH または同等の方法で接続できることです。これを行うツールはありますか、それとも、これが可能であるはずだと考えるのは、Docker の概念化が間違っているのでしょうか。
ベストアンサー1
ここにいくつかの異なる方法があります...
A) docker execを使用する(最も簡単)
exec
Docker バージョン 1.3 以降では、と同様に動作するコマンドがサポートされていますnsenter
。このコマンドは、すでに実行中のコンテナで新しいプロセスを実行できます (コンテナではすでに PID 1 のプロセスが実行されている必要があります)。次のコマンドを実行して、/bin/bash
コンテナの状態を調べることができます。
docker exec -t -i mycontainer /bin/bash
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や特別な目的のデーモンを実行していなくても、既存のコンテナにシェルを入れることができる。