如果使用-d,docker是否会忽略-ti标志?

时间:2020-07-08 00:25:42

标签: docker docker-run

我运行了以下命令:

expand.grid

它可以工作,但是我意识到我可能忘记了远程docker run -d -ti foo 部分。 我假设如果使用-ti,docker会忽略这些标志,有人知道吗? 看来-ti和-d会互相矛盾?

2 个答案:

答案 0 :(得分:0)

它不会忽略-ti

-ti部分意味着它可以直接与用户进行交互,而-d部分则意味着它在启动容器时就将其分离。因此,为了与之实际交互,您必须要做

?> docker attach foo

所以,是的,它可能不是很有用,但是它既不会导致不可能的情况,也不会导致您无法摆脱。

答案 1 :(得分:0)

它仍然设置输入文件句柄,并为容器分配一个伪tty。如果容器内的应用程序尝试从stdin读取,它将挂起等待输入,而不是立即退出或失败。稍后,您可以附加到该过程。例如

$ docker run -dit --name test-dit busybox sh
f0e057ce47e03eb227aacb42e3a358b14fa5d8b26ad490fcec7cbfe0cd3cce73

$ docker run -d --name test-d busybox sh
4f2583d3380953f328b702c88884fbe55f16c44bce13dbccc00c4bb81f3270f2

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                      NAMES 
4f2583d33809        busybox             "sh"                     5 seconds ago       Exited (0) 4 seconds ago                              test-d 
f0e057ce47e0        busybox             "sh"                     14 seconds ago      Up 13 seconds                                         test-dit 

$ docker container attach test-dit
/ #
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                      NAMES   
4f2583d33809        busybox             "sh"                     22 seconds ago      Exited (0) 21 seconds ago                              test-d  
f0e057ce47e0        busybox             "sh"                     31 seconds ago      Exited (0) 2 seconds ago                               test-dit

在第一个容器ls命令中,您可以看到没有立即退出-it选项的shell,而具有-it的shell可用于连接和运行命令。