ここにいくつかの異なる方法があります...
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 や特殊目的のデーモンを実行していなくても、シェルを既存のコンテナーに入れることができます
更新:探索中!
このコマンドを使用すると、実行中の Docker コンテナを調べることができます :
docker exec -it name-of-container bash
docker-compose でこれに相当するものは次のようになります:
docker-compose exec web bash
(この場合、web はサービス名であり、デフォルトで tty があります。)
中に入ったら:
ls -lsa
または次のようなその他の bash コマンド:
cd ..
このコマンドを使用すると、Docker イメージを探索できます。 :
docker run --rm -it --entrypoint=/bin/bash name-of-image
中に入ったら:
ls -lsa
または次のようなその他の bash コマンド:
cd ..
-it
Interactive の略です... と tty.
このコマンドにより、実行中の Docker コンテナまたはイメージを検査できるはずです :
docker inspect name-of-container-or-image
これを実行して、bash
が存在するかどうかを調べることができます。 または sh
そこで。 json の戻り値でエントリポイントまたは cmd を探します。
注: この回答はcommenツールが存在することに依存していますが、 bash
がない場合 シェルまたは ls
のような一般的なツール Dockerfile
にアクセスできる場合は、最初にレイヤーに追加できます :アルパインの例:
RUN apk add --no-cache bash
Dockerfile
にアクセスできない場合 次に、新しく作成されたコンテナーからファイルをコピーし、次のようにしてファイルを調べます。
docker create <image> # returns container ID the container is never started.
docker cp <container ID>:<source_path> <destination_path>
docker rm <container ID>
cd <destination_path> && ls -lsah
docker exec のドキュメントを参照してください
docker-compose exec ドキュメントを参照してください
docker inspect ドキュメントを参照してください
docker create のドキュメントを参照してください
コンテナーが停止しているか、シェルがない場合 (例:hello-world
インストールガイドに記載されているか、alpine
以外 traefik
)、おそらくこれがファイルシステムを探索する唯一の可能な方法です。
コンテナのファイルシステムを tar ファイルにアーカイブできます:
docker export adoring_kowalevski > contents.tar
またはファイルをリストします:
docker export adoring_kowalevski | tar t
イメージによっては、時間とディスク容量がかかる場合があることに注意してください。