docker attach

説明

ローカルの(訳者注:操作中のターミナルのこと)標準入力、標準出力、標準エラー出力を、実行中のコンテナに対して 取り付け(attach) ます。

使い方

使い方: docker attach [オプション] コンテナ

詳細説明

docker attach を使い、自分のターミナルの標準入力、標準出力、標準エラー(あるいは、これら3つの組みあわせ)にアタッチするには、コンテナの ID か名前で実行中のコンテナを指定します。これにより、あたかもコマンドを自分のターミナル上で直接実行しているかのように、それらの継続的な出力を見られるようになったり、インタラクティブ(双方向)に制御できます。

注釈

attach コマンドは ENTRYPOINT/CMD プロセスの出力も表示します。そのため、attach コマンドの使用時、対象のプロセスが単にターミナルで応答がない場合は、あたかも固まっているかのように見えてしまいます。

Docker ホスト上の異なるセッションから、同じプロセスに対し、同時に複数のアタッチができます。

コンテナを停止するには、 CTRL-c を使います。このキー・シーケンスはコンテナに対して SIGKILL を送信します。 --sig-proxy が true の場合は(デフォルト)、 CTRL-c はコンテナに対して SIGINT を送信します。 コンテナを -i-t で実行した場合は、 CTRL-p CTRL-q キー・シーケンスを使えば、実行中のコンテナからデタッチして離れられます。

tty を有効化したコンテナにアタッチした状態(例: -t を使って起動)では、docker attach コマンドを使った標準入力のリダイレクトは禁止されています。

クライアントが docker attach を使ってコンテナの標準入出力に接続時、Docker は 1MB 以下のメモリ・バッファをアプリケーション性能の最大化のために使います。バッファがいっぱいになれば、API の接続速度は、出力を書き込む速度の影響を受け始めます。これは SSH のようなアプリケーションと似ています。そのため、性能がクリティカルなアプリケーションの実行はお薦めしません。フォアグラウントで大量の出力を生成するため、クライアントの接続を遅くします。そのかわり、ユーザは docker logs コマンドでログにアクセスすべきです。

デタッチ・シーケンスの上書き

必要であれば、デタッチ用の Docker キー・シーケンスの設定を上書きできます。Docker デフォルトのキー・シーケンスが他のアプリケーションと重複している場合に役立ちます。デタッチ用キー・シーケンスを指定するには、2つの方法があります。1つはコンテナごとに設定するか、あるいは全体に対してのプロパティを設定します。

個々のコンテナに対するシーケンスを上書きするには、 docker attach コマンドに --detach-keys="<シーケンス>" を指定します。 <シーケンス> の書式は、 [a-Z] までの文字を使うか、 ctrl- と次の項目を組み合わせます。

  • a-z (小文字のアルファベット文字列)

  • @ (アット記号)

  • [ (左かっこ)

  • \\ (2つのバックスラッシュ)

  • _ (アンダースコア)

  • ^ (キャレット)

例えば、 actrl-axctrl-\\ は、いずれも有効なキー・シーケンスです。全てのコンテナに対する異なったキー・シーケンスを設定するには、 設定ファイル のセクションをご覧ください。

オプション

名前、省略形

デフォルト

説明

--detach-keys

コンテナをデタッチするキー・シーケンスを上書き

--no-stdin

標準入力にアタッチしない

--sig-proxy

true

プロセスに対して、受信した全てのシグナルをプロキシ(中継)する

実行中のコンテナにアタッチとデタッチ

$ docker run -d --name topdemo ubuntu /usr/bin/top -b
$ docker attach topdemo
top - 02:05:52 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    373572k total,   355560k used,    18012k free,    27872k buffers
Swap:   786428k total,        0k used,   786428k free,   221740k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1 root      20   0 17200 1116  912 R    0  0.3   0:00.03 top

 top - 02:05:55 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
 Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
 Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 Mem:    373572k total,   355244k used,    18328k free,    27872k buffers
 Swap:   786428k total,        0k used,   786428k free,   221776k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
       1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top


 top - 02:05:58 up  3:06,  0 users,  load average: 0.01, 0.02, 0.05
 Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
 Cpu(s):  0.2%us,  0.3%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 Mem:    373572k total,   355780k used,    17792k free,    27880k buffers
 Swap:   786428k total,        0k used,   786428k free,   221776k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
      1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top
^C$
$ echo $?
0
$ docker ps -a | grep topdemo
7998ac8581f9        ubuntu:14.04        "/usr/bin/top -b"   38 seconds ago      Exited (0) 21 seconds ago                          topdemo

コンテナで実行していたコマンドの、終了コードを得る

次の2つめの例は、 docker attach コマンドで処理された終了コードが、 bash プロセスに戻ってきても使えるのが分かります。

$ docker run --name test -d -it debian
275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab
$ docker attach test
$$ exit 13
exit
$ echo $?
13
$ docker ps -a | grep test
275c44472aeb        debian:7            "/bin/bash"         26 seconds ago      Exited (13) 17 seconds ago                         test

親コマンド

コマンド

説明

docker

Docker CLI の基本コマンド