我运行了以下命令:
expand.grid
它可以工作,但是我意识到我可能忘记了远程docker run -d -ti foo
部分。
我假设如果使用-ti
,docker会忽略这些标志,有人知道吗?
看来-ti和-d会互相矛盾?
答案 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可用于连接和运行命令。