サーチ…


構文

  • ドッカーの統計情報[オプション] [コンテナ...]
  • ドッカーログ[オプション]コンテナ
  • docker top [オプション]コンテナ[psオプション]

実行中のコンテナに入る

コンテナ内で操作を実行するには、 docker execコマンドを使用します。コンテナ内ですべてのコマンドが実行されるため、これは「コンテナに入る」と呼ばれることがあります。

docker exec -it container_id bash

または

docker exec -it container_id /bin/sh

そして、実行中のコンテナにシェルがあります。たとえば、ディレクトリ内のファイルを一覧表示してから、コンテナを終了します。

docker exec container_id ls -la

-u flagを使用すると、特定のユーザー(たとえば、 uid=1013gid=1023のコンテナを入力できます。

docker exec -it -u 1013:1023 container_id ls -la

uidとgidはコンテナ内に存在する必要はありませんが、コマンドでエラーが発生する可能性があります。コンテナを起動してすぐに何かをチェックするために内部に入る場合は、

docker run...; docker exec -it $(docker ps -lq) bash

コマンドdocker ps -lqは、最後に-lqれたコンテナ(l-in -lq )のIDのみを出力します。 (これは、あなたのコンテナでインタープリタを利用できるようにbashを持っていると仮定します。shやzshなどがあります)

リソースの使用状況を監視する

不正なアプリケーションを見つけるには、システムリソースの使用状況を調べるのが効率的です。この例は、コンテナの従来のtopコマンドと同じです。

docker stats

特定のコンテナの統計に従うには、コマンドラインでそれらの一覧を表示します。

docker stats 7786807d8084 7786807d8085

Dockerの統計情報には、次の情報が表示されます。

CONTAINER     CPU %   MEM USAGE / LIMIT   MEM %    NET I/O               BLOCK I/O
7786807d8084  0.65%   1.33 GB / 3.95 GB   33.67%   142.2 MB / 57.79 MB   46.32 MB / 0 B

デフォルトでは、 docker statsはコンテナのIDを表示しますが、これはあまり役に立ちません。コンテナの名前を表示したい場合は、

docker stats $(docker ps --format '{{.Names}}')

コンテナ内のプロセスの監視

システムリソースの使用状況を調べることは、実行中のアプリケーションで問題を絞り込むための効率的な方法です。この例は、コンテナの伝統的なpsコマンドと同等です。

docker top 7786807d8084

出力のフォーマットをフィルタするには、コマンドラインでpsオプションを追加します。

docker top 7786807d8084 faux

または、潜在的に危険なプラクティスであるルートとして実行中のプロセスのリストを取得するには、次のようにします。

docker top 7786807d8084 -u root

docker topコマンドは、シェルやpsコマンドを使用せずに最小限のコンテナをトラブルシューティングする際に特に役立ちます。

実行中のコンテナにアタッチする

「コンテナへの接続」は、コンテナ(およびその中の任意のプログラム)が実行されているコンテキスト内でターミナルセッションを開始する行為です。これは主にデバッグ目的で使用されますが、コンテナ内で実行されているプログラムに特定のデータを渡す必要がある場合にも必要になる可能性があります。

attachコマンドは、これを行うために使用されます。それはこの構文を持っています:

docker attach <container>

<container>はコンテナIDまたはコンテナ名のいずれかになります。例えば:

docker attach c8a9cf1a1fa8

または:

docker attach graceful_hopper

あなたのユーザとドッカーがどのように設定されているかによって、上記のコマンドをsudoする必要があるかもしれません。

注:Attachでは、一度に1つのシェルセッションのみをコンテナにアタッチすることができます。

警告: すべてのキーボード入力はコンテナに転送されます。 Ctrl + c押すとあなたのコンテナが死ぬでしょ

添付されたコンテナから切り離すには、 Ctrl-pCtrl-qを順に押します

複数のシェルセッションをコンテナに接続するには、 execを使用します。コンテナIDの使用:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

コンテナの名前を使用する:

docker exec -i -t graceful_hopper /bin/bash

execはコンテナ内のプログラムを実行します。この場合、 /bin/bash (おそらくコンテナが持つシェルです)。 -iは対話型セッションを表し、 -tは擬似TTYを割り当てます。

注意: アタッチとは異なり、 Ctrl + c押すと対話的に実行されている間だけexec 'dコマンドが終了します。

ログの印刷

ログの後には、ライブ実行中のアプリケーションをデバッグするために、あまり介入しない方法があります。この例では、コンテナー7786807d8084の従来のtail -f some-application.logの動作を再現してい7786807d8084

docker logs --follow --tail 10 7786807d8084

このコマンドは、基本的にコンテナプロセス(pid 1のプロセス)の標準出力を表示します。

あなたのログがネイティブにタイムスタンプが含まれていない場合は、追加することが--timestampsフラグを。

停止したコンテナのログを見ることができます。

  • docker run ... ; docker logs $(docker ps -lq)して失敗したコンテナを起動しdocker run ... ; docker logs $(docker ps -lq)

  • コンテナのIDまたは名前を見つける

docker ps -a

その後

docker logs container-idまたは

docker logs containername

停止したコンテナのログを見ることができるため

Dockerコンテナプロセスのデバッグ

Dockerは、仮想マシンではなく、プロセスを実行するための素晴らしい方法です。したがって、ホスト上のプロセス(ルートなど)を検査するための適切な権限を持つユーザーとして、実行中のコンテナプロセスを調べるだけで、「コンテナ内の」プロセスをデバッグすることも可能です。例えば、単純なpsをrootとして実行することで、ホスト上のすべての "コンテナプロセス"をリストすることができます:

sudo ps aux

現在実行中のDockerコンテナがすべて出力に表示されます。

これは、コンテナ内で実行中のプロセスをデバッグするためのアプリケーション開発時に役立ちます。適切な権限を持つユーザーとして、strace、ltrace、gdbなどのコンテナプロセスで一般的なデバッグユーティリティを使用できます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow