docker 使用 --interactive 和 --tty 标志运行

HKI*_*KIT 4 flags containers interactive docker

编辑:

有人标记了这个问题的重复项,但它根本没有解释底层机制。

但相比之下,这个堆栈溢出解决了我在 Case I 中的困惑,但没有解决 Case II


我是 docker 的新手,我对 --interactive、--attach 标志的使用以及所涉及的概念感到困惑

我将在 docker hub 中使用busybox来展示我的困惑。


案例一

当我使用以下命令运行容器时。docker run --interactive --tty busybox sh

容器正在运行并接受输入 在此输入图像描述

根据该文档, --interactive 标志用于

即使未连接,也保持 STDIN 打开

我不明白即使不附着是什么意思,附着什么?


情况二:然后我退出容器并尝试使用 docker start --attach abdd796820b1.

终端似乎也接受输入,但是当我输入 ls 或 echo 时,它没有给出响应。 在此输入图像描述 --attach 标志做了什么?

请帮忙。

Rat*_*yya 10

您可以通过两种方式与正在运行的容器进行交互

  • 执行

--交互式标志

正如你提到的,它已经说过了

即使未连接,也保持 STDIN 打开

根据我的理解,这意味着它将从您的终端/控制台读取输入并对其做出反应或呈现输出。如果你跑docker run --tty alpine /bin/sh并且docker run --tty --interactive alpine /bin/sh. 一个人--interactive会对此做出反应。

附加到正在运行的进程

如果 docker 容器是使用/bin/bash命令启动的,则可以使用 Attach 访问它,如果没有,则需要执行命令以使用exec.

更深入:如果 docker 容器开始使用,/bin/bash那么它将成为 PID 1 的容器,并且attach命令会将您附加到 PID 1。

执行

创建新进程

如果你想在容器内创建一个新进程,而不是使用 exec,它就像exec用于在容器内执行apt-get命令而不附加到它或运行节点或 python 脚本。

例如:docker exec -it django-prod python migrate

请参阅此处-i用于交互式,-t用于--tty伪 TTY。交互式,以便您可以在该命令出现提示时输入。