[英]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 + --tty
当docker run
这个命令..它会带你直接容器内部,,其中-d
是短期的--detach
这意味着你只要运行容器,然后从中分离所以基本上你在后台运行容器..编辑:所以,如果你运行的泊坞窗容器-itd
它会运行-it
的选项,然后从容器脱离你,所以你的容器仍然在后台,即使没有任何默认运行应用程序运行..
docker run -it ubuntu:xenial /bin/bash
以交互模式启动容器(因此-it
标志),允许您与容器的/bin/bash
交互。 这意味着现在您将在容器内拥有bash
会话,因此您可以ls
、 mkdir
或在容器内执行任何 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.