docker 运行 带有 --interactive 和 --tty 标志
docker run with --interactive and --tty flag
编辑:
有人标记了 this question 的副本,但它根本没有解释底层机制。
但是相比之下,解决了案例一的困惑,但案例二没有。
我是 docker 的新手,我对 --interactive、--attach 标志的用法以及涉及的概念感到困惑
我将在 docker 中心使用 busybox 来展示我的困惑。
案例一:
当我 运行 使用以下命令创建容器时。 docker run --interactive --tty busybox sh
容器正在 运行正在接受输入
根据 document,--interactive 标志用于
Keep STDIN open even if not attached
没看懂即使不附加是什么意思,附加什么?
案例二:
然后我退出容器并尝试使用
docker start --attach abdd796820b1
。
终端似乎也接受输入,但是当我键入 ls 或 echo 时,它没有给出响应。
--attach 标志做了什么?
请帮忙。
您可以通过两种方式与 运行ning 容器进行交互
- 附加
- 执行
--互动标志
正如你提到的那样
Keep STDIN open even if not attached
根据我的理解,这意味着它将读取您的 terminal/console 的输入并对其做出反应或呈现输出。如果你 运行 docker run --tty alpine /bin/sh
和 docker run --tty --interactive alpine /bin/sh
。 --interactive
的人会对此做出反应。
附加
Attach to a running process
如果docker容器是使用/bin/bash
命令启动的,你可以使用attach访问它,如果不是那么你需要执行命令在里面创建一个bash实例使用 exec
.
的容器
更深入:如果docker容器是使用/bin/bash
启动的,那么它将成为容器PID 1并且attach
命令将附加你到 PID 1.
执行
Creates new process
如果你想在容器内创建一个新进程而不是 exec 它使用像 exec
用于在容器内执行 apt-get
命令而不附加到它或 运行 一个节点或python 脚本。
例如:docker exec -it django-prod python migrate
请参阅此处 -i
用于交互,-t
用于 --tty
,即伪 TTY。交互式,以便您可以在此命令提示时输入。
您需要提供 -i/--interactive 选项以将您的终端 STDIN 转发到容器的 sh。
试试这个:
docker start -ai CONTAINER
编辑:
有人标记了 this question 的副本,但它根本没有解释底层机制。
但是相比之下,
我是 docker 的新手,我对 --interactive、--attach 标志的用法以及涉及的概念感到困惑
我将在 docker 中心使用 busybox 来展示我的困惑。
案例一:
当我 运行 使用以下命令创建容器时。 docker run --interactive --tty busybox sh
容器正在 运行正在接受输入
根据 document,--interactive 标志用于
Keep STDIN open even if not attached
没看懂即使不附加是什么意思,附加什么?
案例二:
然后我退出容器并尝试使用
docker start --attach abdd796820b1
。
终端似乎也接受输入,但是当我键入 ls 或 echo 时,它没有给出响应。
请帮忙。
您可以通过两种方式与 运行ning 容器进行交互
- 附加
- 执行
--互动标志
正如你提到的那样
Keep STDIN open even if not attached
根据我的理解,这意味着它将读取您的 terminal/console 的输入并对其做出反应或呈现输出。如果你 运行 docker run --tty alpine /bin/sh
和 docker run --tty --interactive alpine /bin/sh
。 --interactive
的人会对此做出反应。
附加
Attach to a running process
如果docker容器是使用/bin/bash
命令启动的,你可以使用attach访问它,如果不是那么你需要执行命令在里面创建一个bash实例使用 exec
.
更深入:如果docker容器是使用/bin/bash
启动的,那么它将成为容器PID 1并且attach
命令将附加你到 PID 1.
执行
Creates new process
如果你想在容器内创建一个新进程而不是 exec 它使用像 exec
用于在容器内执行 apt-get
命令而不附加到它或 运行 一个节点或python 脚本。
例如:docker exec -it django-prod python migrate
请参阅此处 -i
用于交互,-t
用于 --tty
,即伪 TTY。交互式,以便您可以在此命令提示时输入。
您需要提供 -i/--interactive 选项以将您的终端 STDIN 转发到容器的 sh。
试试这个:
docker start -ai CONTAINER