docker run -itフラグとは何ですか?


108

私はdockerで複雑なことをしていましたが、結局のところ、-itフラグの意味がわかりません。最近docker run、少し混乱したコマンドの例に出くわしました。

docker run -itd ubuntu:xenial /bin/bash 

私の質問は-it、インスタンス化中のコンテナーが実行されている場合、ここにフラグを書く意味は何ですかbin/bash

ドキュメントには例があります

docker run --name test -it debian

説明付き

-itは、コンテナーのstdinに接続された疑似TTYを割り当てるようにDockerに指示します。コンテナにインタラクティブなbashシェルを作成します。

およびヘルプページの-tフラグの説明

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

中に-itフラグを削除した場合

docker run -d ubuntu:xenial /bin/bash

私が新しく作成したコンテナはあまり存続していません

docker ps -a

出口として指定されています

申し訳ありませんが、私の質問がかなりばかげている場合、インターネットでは説明を見つけることができません(その点についてかなりの誤解があります)。


/bin/bashstdinで利用可能なコンテンツがない場合、実行するコマンドもユーザーにプロンプ​​トを表示する方法もないため、終了します。これは100%正常で予期される動作です。
チャールズダフィー

回答:


97

-itは、このコマンドを使用し--interactive + --ttyた場合の短縮形docker runです。コンテナの内部で直接実行されます。ここで、-d--detach、コンテナを実行してから切り離すだけなので、基本的にはバックグラウンドでコンテナを実行します 。edit: so Dockerコンテナーを-itd実行すると、-itオプションが実行されてコンテナーから切り離されるため、デフォルトのアプリを実行しなくてもコンテナーはバックグラウンドで実行されます。


-itオプションなしで実行するとコンテナーが停止するため、これは正しい答えではありません。
Alex

1
つまり、コンテナにエラーがあるということです。コンテナの起動に失敗したかCMD、デフォルトでコマンドがなかったため、デフォルトでアプリが実行されなかった可能性があります。.soバックグラウンドで実行すると、実行するジョブがないため、すぐに終了します。。
Fendi jatmiko 2018年

@Alex、コンテナー内のプログラムがstdinが閉じられたときに終了するものである場合、あなたの答えがあります(それがないと実行できない理由について-i)。同様に、TTYの有無に基づいて異なる動作をするコマンドを実行する場合、の存在に応じて異なる動作を得ることができます-t
Charles Duffy、

@Alex、...そして明確に/bin/bash </dev/nullするために、Dockerなしで実行すると、すぐに終了します。実行docker runせずにすること-iのコピーに同じことをやっているbash、それが始まること。(がない-tと、標準入力はありますがTTYはありません。そのため、それ自体をインタラクティブシェルとして検出しないため、動作が少し異なります。
Charles Duffy、

1
@AdmiralAdama、色の問題を修正するのは-tオプションです。TTYはカラートークンを理解するために必要です。
kroiz

42

docker run -it ubuntu:xenial /bin/bashコンテナをインタラクティブモード(したがって-itフラグ)で起動し、コンテナとの対話を可能にします/bin/bash。ことは、今あなたが持っているでしょうbashセッションを内側にすることができますので、コンテナlsmkdirまたはコンテナ内の任意のbashコマンドを実行します。

ここでの鍵は「インタラクティブ」という言葉です。フラグを省略すると、コンテナは引き続き実行され/bin/bashますが、すぐに終了します。フラグを設定すると、コンテナが実行され/bin/bash、辛抱強く入力を待ちます。


1
-tフラグを使用する必要があるのはなぜですか? docker run -i ubuntu:xenial /bin/bash
Alex

3
-t:疑似tty、または「疑似端末」。ターミナルがないと、コンテナーに入力を送信できません。
dvnguyen

docker run -it ubuntu:xenial 答えてくれてありがとう。でも、このコマンドを最初からターミナルセッションで使用します(このとき、bin / bashを実行する必要があるため)。また、ターミナルセッションを作成します
Alex

1
あなたが正しいです。私の言葉を取り戻します。-tタグがなくてもコンテナーと対話できますが、これを使用すると、より優れた、より多くの機能を持つターミナルができます。-iと実行し-itて違いを確認できます。
dvnguyen

違いがわかりません。あなたの努力をありがとう!
Alex
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.