Docker - Detached and Interactive?

2020-07-02 10:42发布

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.

标签: docker
3条回答
一纸荒年 Trace。
2楼-- · 2020-07-02 11:09

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.

查看更多
小情绪 Triste *
3楼-- · 2020-07-02 11:13

-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 the docker 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 and ls shows results in one column. This difference is like the difference between running ls and running ls | cat, where cat does not have a pseudo-tty.

When you docker run bash in a container, -it and -itd behave differently as follows:

  • With -it, docker run gives you the bash prompt immediately.
  • With -itd, docker run exits immediately, but you can docker attach after that and get the bash prompt just as if you had just done docker run -it.
查看更多
贼婆χ
4楼-- · 2020-07-02 11:16

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.

enter image description here

查看更多
登录 后发表回答