docker attach¶
参考
- docker container attach
https://docs.docker.com/engine/reference/commandline/container_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つのバックスラッシュ)_
(アンダースコア)^
(キャレット)
例えば、 a
、 ctrl-a
、 x
、 ctrl-\\
は、いずれも有効なキー・シーケンスです。全てのコンテナに対する異なったキー・シーケンスを設定するには、 設定ファイル のセクションをご覧ください。
オプション¶
名前、省略形 |
デフォルト |
説明 |
---|---|---|
|
コンテナをデタッチするキー・シーケンスを上書き |
|
|
標準入力にアタッチしない |
|
|
|
プロセスに対して、受信した全てのシグナルをプロキシ(中継)する |
例¶
実行中のコンテナにアタッチとデタッチ¶
$ 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