我做了一些谷歌搜索,没有运气找到一个我跑,docker run -i some_image而不是 docker run -it some_image.
如果我运行docker run -i --name sample some_image bash,容器在前台运行,但我无法从我所在的shell中与它进行交互.我甚至无法用CTRL + C来阻止它.但是,我可以弹出另一个shell并运行docker exec -it sample bash并获取对容器的访问权限.
如果我跑docker run -i -d --name sample some_image bash,容器立即退出.我可以重新启动它docker start sample然后它保持运行,所以我可以docker exec -it sample bash再次运行并与之交互.
但是,在所有这些情况下,我最终都会使用-it与容器进行交互.在哪个世界我不需要-t旗帜?
干杯
我只是读此文章泊坞窗,它描述了如何dockerize一个简单的应用程序的文章.执行以下命令:
$ docker run -t -i ubuntu:14.04 /bin/bash,
Run Code Online (Sandbox Code Playgroud)
然后,给出以下解释:
在这里,我们再次指定了docker run命令并启动了一个ubuntu:14.04图像.但是我们也传递了两个标志:-t和-i.-t标志在我们的新容器中分配一个伪tty或终端,-i标志允许我们通过获取容器的标准(STDIN)来建立交互式连接.
我不明白其含义:
-i flag allows us to make an interactive connection by grabbing the standard in (STDIN)
Run Code Online (Sandbox Code Playgroud)
谢谢.
说实话,我一直困惑docker exec -it …,docker exec -i …和docker exec -t …,所以我决定做一个测试:
docker exec -it …:
# docker exec -it 115c89122e72 bash
root@115c89122e72:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Run Code Online (Sandbox Code Playgroud)
它正常工作.
docker exec -i …:
# docker exec -i 115c89122e72 bash
^C
Run Code Online (Sandbox Code Playgroud)
命令挂起,我必须使用Ctl+ c来中断它.
docker exec -t …:
# docker exec -t 115c89122e72 bash
root@115c89122e72:/# ls
^C …Run Code Online (Sandbox Code Playgroud)