编辑:
有人标记了this question的重复项,但根本没有解释其潜在机制。
但是相反,this stack overflow解决了我在案例I中的困惑,但不是案例II。
[我是docker的新手,对--interactive,--attach标志以及所涉及的那些概念的使用感到困惑
我将在docker hub中使用busybox显示我的困惑。
案例I:
当我使用以下命令运行容器时。 docker run --interactive --tty busybox sh
根据document,-interactive标志用于
即使未连接,也请保持打开STDIN
我不理解即使不附加是什么,附加在什么内容上?
案例II:然后我退出容器并尝试使用启动它docker start --attach abdd796820b1
。
终端似乎也接受输入,但是当我键入ls或echo时,它不会给出响应。--attach标志做了什么?
可以通过三种方式与正在运行的容器进行交互
-交互式标志
您已经说过它已经说过
即使未连接,也请保持打开STDIN
据我所知,它将从终端/控制台读取输入,并对它做出反应或呈现输出。如果运行docker run --tty alpine /bin/sh
和docker run --tty --interactive alpine /bin/sh
。具有--interactive
的人将对此做出反应。
attach
附加到正在运行的进程
如果docker容器是使用/bin/bash
命令启动的,则可以使用attach访问它,否则,您需要执行命令以使用exec
在该容器内创建一个bash实例。
深入了解:如果使用/bin/bash
启动Docker容器,则它将成为容器PID 1,并且attach
命令将您附加到PID 1。
exec
创建新流程
[如果您想在容器内创建一个比exec更新的进程,则它像exec
一样用于在容器内执行apt-get
命令而不附加它或运行节点或python脚本。
例如:docker exec -it django-prod python migrate
请参见此处-i
用于交互,-t
用于伪TTY的--tty
。交互式的,以便您可以输入此命令是否提示某些内容。