docker - docker 使用 --interactive 和 --tty 标志运行
问题描述
编辑:
有人标记了这个问题的重复,但它根本没有解释底层机制。
但相比之下,这个堆栈溢出解决了我在案例 I 中的困惑,而不是案例 II。
我是 docker 的新手,我对 --interactive、--attach 标志和所涉及的概念的使用感到困惑
我将在 docker hub 中使用busybox来展示我的困惑。
案例一:
当我使用以下命令运行容器时。docker run --interactive --tty busybox sh
根据文档,--interactive 标志用于
即使没有连接,也保持 STDIN 打开
我不明白即使不依附,依附于什么是什么意思?
案例二:然后我退出容器并尝试使用
docker start --attach abdd796820b1
.
终端似乎也接受输入,但是当我输入 ls 或 echo 时,它没有给出响应。 --attach 标志做了什么?
请帮忙。
解决方案
您可以通过两种方式与正在运行的容器进行交互
- 附
- 执行
--交互式标志
正如你提到的,它已经说过
即使没有连接,也保持 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
See here-i
是交互式的,并且-t
是--tty
伪 TTY。交互式,以便您可以在此命令提示某些内容时输入。
推荐阅读
- rest-assured - 使用 RestArrured 触发时 API 返回 text/html 而不是 JSON
- python - 在python中循环两个文本文件
- midi - csound中的midipolyaftertouch是否损坏?
- django - 如何从重复查询中优化查询集
- c# - “没有足够的权限来完成操作”,尽管授予了所有必要的权限
- python - 将数据帧内的字符串转换为数组的有效方法
- python - 熊猫:弃用警告:元素比较失败
- c++ - 如何在鼠标钩子进程中发送鼠标输入时避免延迟?
- python-3.x - 在类中导入模块,但在类方法中使用模块时出现名称错误
- javascript - 如何以角度显示拖放图像的预览?