When reading different books, articles and forum threads I often saw the following Docker Run command:
docker run -tid <dockerimage>
What I really don't understand: Does it make sense to start a detached (-d) Container interactive (-i) with pseudo tty (-t) ?
I mean a detached Container will never prompt you to a console so I don't think it's necessary to call it with -it.
I think that in general starting up a detached interactive container like this is an unusual use case. It's certainly nothing I ever end up using in my daily use of docker.
Some applications may behave differently when their stdout is associated with a tty vs when it's not (e.g., they may only log to stdout by default when their output is a terminal, or if you're running a shell it may simply exit when not associated with a terminal).
You may want to
docker attach
to the running container. This is especially important if you've started some sort of detached shell.-i
(interactive) is about whether to keep stdin open (some programs, like bash, use stdin and other programs don't).-d
(detached) is about whether thedocker run
command waits for the process being run to exit. Thus, they are orthogornal and not inherently contradictory. A program like bash exits when stdin in closed, so without-i
, it exits immediately.-t
allocates a pseudo-tty. You can see the difference from running bash with-it
vs with just-i
. For example, without -t, you don't get any prompt andls
shows results in one column. This difference is like the difference between runningls
and runningls | cat
, wherecat
does not have a pseudo-tty.When you
docker run
bash in a container,-it
and-itd
behave differently as follows:-it
,docker run
gives you the bash prompt immediately.-itd
,docker run
exits immediately, but you candocker attach
after that and get the bash prompt just as if you had just donedocker run -it
.When you run an image with only -d option, the container will exit immediately after the command executed. If you run with -itd option, the container will be detached but running in background, and you can attach back when you need. See the screenshot attached for more clarity.