繁体   English   中英

什么是 docker run -it 标志?

[英]what is docker run -it flag?

我正在用 docker 做一些复杂的事情,但结果我不知道-it标志是什么意思。 最近我遇到了一些docker run命令的例子,这让我有点困惑。

docker run -itd ubuntu:xenial /bin/bash 

我的问题是,如果容器在实例化期间运行bin/bash ,那么在这里写-it标志是什么意思

在文档中我们有一个例子

docker run --name test -it debian

有解释

-it 指示 Docker 分配一个连接到容器标准输入的伪 TTY; 在容器中创建交互式 bash shell。

以及帮助页面中对-t标志的解释

-t, --tty 分配一个伪TTY

如果我在删除-it标志

docker run -d ubuntu:xenial /bin/bash

我新创建的容器没有那么活

docker ps -a

它被指定为退出

抱歉,如果我的问题很愚蠢,我无法在 Inte.net 上找到解释(我对这一点有很大的误解)。

-it是短期的--interactive + --ttydocker run这个命令..它会带你直接容器内部,,其中-d是短期的--detach这意味着你只要运行容器,然后从中分离所以基本上你在后台运行容器..编辑:所以,如果你运行的泊坞窗容器-itd它会运行-it的选项,然后从容器脱离你,所以你的容器仍然在后台,即使没有任何默认运行应用程序运行..

docker run -it ubuntu:xenial /bin/bash以交互模式启动容器(因此-it标志),允许您与容器的/bin/bash交互。 这意味着现在您将在容器拥有bash会话,因此您可以lsmkdir或在容器内执行任何 bash 命令。

这里的关键是“互动”这个词。 如果省略该标志,容器仍会执行/bin/bash但会立即退出。 使用该标志,容器执行/bin/bash然后耐心等待您的输入。

没有任何标志的正常执行:

[ec2-user@ip-172-31-109-14 ~]$ sudo docker exec 69e937450dab ls
bin
boot
dev
docker-entrypoint.d
docker-entrypoint.sh
etc

如果您的命令需要像 cat 这样的输入,您可以尝试:

[ec2-user@ip-172-31-109-14 ~]$ echo test | sudo docker exec 69e937450dab cat

什么都不会显示,因为没有输入 stream 进入 docker 容器。 这可以通过 -i 标志来实现。

[ec2-user@ip-172-31-109-14 ~]$ echo test | sudo docker exec -i 69e937450dab cat
test

现在,假设您希望 bash 作为进程启动:

sudo docker exec 69e937450dab bash

你什么也看不到,因为进程是在容器中启动的。 添加标志将完成交易:

[ec2-user@ip-172-31-109-14 ~]$ sudo docker exec -t 69e937450dab bash
root@69e937450dab:/# 

但这并没有真正帮助,因为我们需要一个输入 stream,它接受我们的命令并且可以被 bash 接收。因此,我们需要将两者结合起来:

[ec2-user@ip-172-31-109-14 ~]$ sudo docker exec -i -t 69e937450dab bash
root@69e937450dab:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  hi  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@69e937450dab:/# 

小回顾:

-t 用于将 bash 进程附加到我们的终端

-i 用于能够通过 STDIN 发送输入,例如使用键盘发送到容器中的 bash

没有 -i 可以用于不需要输入的命令。 如果您不想将 docker 容器进程附加到您的 shell,则可以不使用 -t 和 bash。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM