【问题标题】:docker run with --interactive and --tty flagdocker 使用 --interactive 和 --tty 标志运行
【发布时间】:2020-01-29 10:24:35
【问题描述】:

编辑:

有人标记了this question的重复项,但它根本没有解释底层机制。

但相比之下,this stack overflow 解决了我在案例 I 中的困惑,但不是案例 II


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

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


案例一

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

容器正在运行并接受输入

根据document,--interactive标志用于

即使没有附加,也保持 STDIN 打开

不明白即使不依附是什么意思,依附于什么?


案例二: 然后我退出容器并尝试使用 docker start --attach abdd796820b1

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

请帮忙。

【问题讨论】:

  • 这能回答你的问题吗? what is docker run -it flag?
  • @jannis,它没有,但它导致另一个页面here 回答了我的大部分问题。但它没有回答我的最后一个问题, --attach 标志的作用是什么。
  • “那我退出容器”——你是怎么做到的?
  • @jannis 类型退出

标签: docker containers interactive flags


【解决方案1】:

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

  • 附上
  • 执行

--交互标志

正如你所说,它已经说过

即使没有附加,也保持 STDIN 打开

据我了解,这意味着它将从您的终端/控制台读取输入并对其做出反应或呈现输出。如果您运行docker run --tty alpine /bin/shdocker run --tty --interactive alpine /bin/sh。带有--interactive 的人会对此做出反应。

附加

附加到正在运行的进程

如果 docker 容器是使用 /bin/bash 命令启动的,您可以使用 attach 访问它,如果不是,则需要执行命令以使用 exec 在容器内创建一个 bash 实例。

更深入:如果 docker 容器是使用 /bin/bash 启动的,那么它会变成容器 PID 1,attach 命令会将您附加到 PID 1。

执行

创建新进程

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

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

见此处-i 用于交互式,-t 用于--tty,即伪 TTY。交互式,以便您可以在此命令提示某些内容时输入。

【讨论】:

    【解决方案2】:

    您需要提供 -i/--interactive 选项以将终端 STDIN 转发到容器的 sh。

    试试这个:

    docker start -ai CONTAINER
    

    https://docs.docker.com/engine/reference/commandline/start/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2014-01-22
      相关资源
      最近更新 更多