私は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
。