Dockerデタッチモード


84

Dockerの世界でのデタッチモードとは何ですか?この記事のリンクを読みました が、デタッチモードの意味を正確に説明していません。

回答:


141

-dオプションを使用して、Dockerコンテナをデタッチモードで起動できます。したがって、コンテナは起動し、バックグラウンドで実行されます。つまり、コンテナを起動し、起動後に他のコマンドにコンソールを使用できます。

デタッチモードの反対はフォアグラウンドモードです。これは、-dオプションが使用されていない場合のデフォルトモードです。このモードでは、実行に使用しているコンソールがdocker run標準入力、出力、およびエラーに接続されます。これは、コンソールがコンテナのプロセスに接続されていることを意味します。

デタッチモードでは、Dockerコンテナの標準出力をdocker logs -f <container_ID>。で追跡できます。

両方のオプションを試してください。私は常にデタッチモードを使用してコンテナを実行しています。もう少しわかりやすく説明できればと思います。


こんにちは、あなたが言ったことについて混乱していること-そしてdockerのドキュメントが言っていることは「あなたは...他のコマンドのために起動後にhteコンテナを使うことができる」です。明らかに、フォアグラウンドでは、-itがあり、プロンプトが表示されている場合、他のコマンドにコンテナーを使用しています。それでも... -dの定義を探して
ブライアンBulkowski

3
@ BrianBulkowski-それはこの答えがまったく言っていることではありません。「...起動後にコンソールを使用できます...」というフレーズは、Dockerコンテナーを起動した端末が、Dockerコンテナーがバックグラウンドで実行されている間も通常のシェルとして使用できることを意味します。
役に立たない

ログ出力をファイルにパイプすることもできますか?docker logs -f <container_ID>を呼び出すと、端末が次々と1行だけ印刷されてしまいます。
ユルゲンK.

@JürgenK。私はあなたが簡単にできることを知りましたdocker logs -f [container_ID] > logs.txt。それが機能しない場合は、以下の@BMitchで提案されているように、Dockerコンテナを起動するときに「-it」フラグを追加してみてください。
Sanlok Lee

@Sanlok Lee ありがとう。Dockerログファイルの行番号に制限を設定することはできますか?サイズは静かに高速を高め、私はそれをクリアする必要がある
ユルゲン・K.

29

dockerコマンドラインのdetachオプションは、dockerクライアント(docker)がサーバー(dockerd)に要求を行い、その要求がサーバー上で継続している間、クライアントが終了することを示します。混乱の一部は、dockerが単一のプロセスのように見えることです。実際には、クライアントは、すべてのコマンドをサーバーに送信するRESTAPIの単なる薄いフロントエンドであるクライアント/サーバーアプリケーションです。

を使用するdocker container run --detachと、コンテナが作成され、成功した場合はサーバーがコンテナIDで応答し、他のコマンドを自由に実行できる間、コンテナはサーバー上で引き続き実行されます。これは、他のコマンドを実行し続けている間にバックグラウンドで起動したいサーバー(nginxなど)によく使用されます。--interactiveおよび-ttyオプション(多くの場合省略形-it)を使用してコンテナーを構成し、後でを実行しdocker container attachて、すでに実行中のコンテナーに接続できることに注意してください。(で実行されているコンテナーに接続するまで、コンテナー-itdによるstdinからの読み取りの試行は、渡した直後にすぐに終了することが多い入力の終了を確認する代わりに、ハングすることに注意してください-d。)

デタッチオプションなしで実行した場合、クライアントはコンテナーの作成後すぐにアタッチAPI呼び出しを実行するため、出力を確認し、オプションでコンテナーで実行中のプロセスに入力を提供できます。これは、コンテナがインタラクティブなものを実行している場合に役立ちます(例/bin/bash)。

他のいくつかのコマンドでは、docker-compose up -dプロジェクト全体を開始し、バックグラウンドでサーバー上で実行したままにするなど、デタッチオプションを使用できます。docker serviceサーバーに変更を送信してサービスのターゲット状態を作成または更新した後にデタッチするコマンドも多数あります。デタッチしない場合、クライアントはサービスの現在の状態がターゲット状態と一致するまで待機し、表示されます。展開の進行状況。注意docker serviceコマンド、あなたは合格する必要があり--detach=false取り付けられたままし、行動はあなたのバージョンに応じて、この一年間変更されています。


1
IMO、接続されたコンテナからインタラクティブにデタッチする方法についても言及するのは理にかなっています(CTRL-p CTRL-q--detach-keys
Leon

@Leon良いアドバイスですが、それが機能するためには、--interactive--tty(別名-it)の両方でコンテナーに接続されていることを確認してください。
BMitch

1
ありがとう@BMitch!私は今理解していると思います。
VSO

1
@BMitchについてうまく説明しました。ドキュメントがこれほど徹底的になることを願っています!
RaviTiwari19年

-6
docker run -d -t ubuntu:14.04

dockerrun-dockerイメージからdockerコンテナとしてインスタンスを作成します。(イメージがローカルで利用できない場合は、Dockerハブからプルします)ubuntu-イメージ名

14.04-タグ

-d、-detach-デタッチモード

-t、-tty-疑似TTYを割り当てます


13
これは質問に対する答えではありません
0xc0de 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.