混淆码头工人的-i“即使没有附加也能保持STDIN开放”

时间:2016-04-12 04:28:16

标签: docker

-i标记被描述为“即使没有附加也保持STDIN打开”,但Docker run reference也说:

  

如果你没有指定-a,那么Doc​​ker将附加所有标准流。

所以,默认情况下,stdin是附加的,但是没有打开?我认为当STDIN被连接但没有打开时没有任何意义,对吧?

1 个答案:

答案 0 :(得分:8)

与该文档相关联的

The exact code是:

// 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")

换句话说,如果设置了-i,则stdin仅附加

        if *flStdin {
            flAttach.Set("stdin")
        }

从这个意义上说,"所有"标准流并不准确。

如下所述,该代码(由doc引用)has since changed to

cmd.Var(&flAttach, []string{"a", "-attach"}, "Attach to STDIN, STDOUT or STDERR")

-a不再是男人"附加所有流",但是"specify which streams you want attached"

var (
    attachStdin  = flAttach.Get("stdin")
    attachStdout = flAttach.Get("stdout")
    attachStderr = flAttach.Get("stderr")
)

-i remains a valid option

if *flStdin {
    attachStdin = true
}