关于docker工人的疑惑-i“即使没有连接,也要打开STDIN”
-i
标志被描述为“保持STDIN打开,即使没有连接”,但是Docker运行引用也说:
如果你没有指定-a,那么Docker将会附加所有的标准stream。
所以,默认情况下,标准input连接,但不打开? 当STDIN被附加但是没有打开的时候,我觉得没有任何意义,对吧?
与该文档相关的确切代码是:
// If neither -d or -a are set, attach to everything by default if len(flAttach) == 0 && !*flDetach { if !*flDetach { flAttach.Set("stdout") flAttach.Set("stderr") if *flStdin { flAttach.Set("stdin") } } }
附:
flStdin := cmd.Bool("i", false, "Keep stdin open even if not attached")
换句话说,stdin 只在-i
被设置的情况下被附加。
if *flStdin { flAttach.Set("stdin") }
从这个意义上说,“所有”的标准stream是不准确的。
如下所述,该代码(由doc引用) 已经改为 :
cmd.Var(&flAttach, []string{"a", "-attach"}, "Attach to STDIN, STDOUT or STDERR")
-a
不再有人“附加所有stream”,而是“指定要附加的stream” 。
var ( attachStdin = flAttach.Get("stdin") attachStdout = flAttach.Get("stdout") attachStderr = flAttach.Get("stderr") )
-i
仍然是一个有效的select :
if *flStdin { attachStdin = true }