关于docker工人的疑惑-i“即使没有连接,也要打开STDIN”

-i标志被描述为“保持STDIN打开,即使没有连接”,但是Docker运行引用也说:

如果你没有指定-a,那么Doc​​ker将会附加所有的标准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 }