ランアイ対ランイット?

ランアイ対ランイット?

私はWindowsでboot2dockerを使用しています。私は次のコマンドを試しました

  docker run -i centos /bin/bash

  docker run -it centos /bin/bash

どちらも同じタイプの実行を提供します。 -iがインタラクティブモードであることを読みました。 -t は端末モードです。ただし、-iと-itとpwd同じコマンドを実行できます。ls生成されたUIのみが異なります。

それでは、これら2つのフラグは何に使用されますか?私は何を逃したことがありませんか?

答え1

docker -i非対話型シェルを提供します(-i意味インタラクティブbashではなくdockerで動作します。)

次のコマンドを実行してこれを確認できます(bashが対話型の場合は変数が$-含まれますi)。

echo $- |grep i && echo i am interactive || echo i am non-interactive

この非対話型bashはコマンドプロンプトを表示せず、長期実行コマンドがいつ操作を完了したのかわかりにくく、コマンド履歴が利用できず、ttyベースのプログラムはめちゃくちゃに見えます。

vim(文句を言うOutput/Input is not a terminal、奇妙に見え、行動する)またはrogue同様のゲーム(crawl仕事を拒否するなど)を試してください。

一方、一般的な対話型シェルdocker -itにはコマンドプロンプト(調整可能$PS1)とコマンド履歴(含む)があります。Ctrl-rコマンドが完了すると、プロンプトによって明確に表示され、ttyを必要とするプログラムは正常に動作します。

したがって、シェルにコマンドを手動で入力するにはdocker -it

関連情報