当前位置: 首页 > article >正文

Docker与容器交互——attach和exec

阅读《Docker 从入门到实践》时,读到“进入容器”这一章节,有两个主要 的命令,分别是:

docker attach

docker exec

其中提到一句话:

注意: 如果从这个 stdin 中 exit,会导致容器的停止。        

一、为什么stdin 中 exit会导致容器的停止呢?

docker attach 和docker exec 都是和容器交互的命令,但是交互的本质是不一样的。

docker attach

如果用docker attach 和容器进行交互,那么,意味着会将标准的输入、输出以及错误流都附加到正在运行的容器的主进程上。它的好处是,通过这个命令可以与容器的主进程进行直接的交互,就像我们正在容器的内部运行命令一样。

如果我们要退出与这个容器的交互,按Ctrl+C 会向容器的主进程发送 SIGINT 信号,此时可能会导致容器的停止。

建议的操作是按下 Ctrl+P,然后按下 Ctrl+Q,即可安全退出。

docker exec

使用docker exec命令,那么会在当前运行的容器中,创建一个新的进程。它不会影响主进程。

如果要退出容器,使用docker exit 命令即可。

二、既然docker attach会导致容器停止,那么直接使用docker exec来替代docker attach 岂不更好?

docker attach 和docker exec有各自的应用场景。使用docker attach 进行快速的查看输出或者进行简单的调试,还是十分方便的。它适用于短时间以及简单的的容器交互操作。

相反,如果是长时间的交互或者比较复杂的操作,那么最好的还是使用docker exec,重新创建一个容器进程。

PS:

写到这里,让我想起来,十年前写PHP代码的时候,技术leader给了我们线上主代码库的全权限。有一次加班,我一不小心把代码库上的代码删了。当时我的内心是无比惶恐的。

没想到,技术leader得知后,只是略微的愣了一会,就跟我说:没事,你先回家吧,我来处理。

最后,代码库恢复了。这件事也以我给全组人道歉买零食结束。

到现在,我都一直感激这位leader对我的善意。


http://www.kler.cn/a/548547.html

相关文章:

  • 【DeepSeek】解决 DeepSeek 服务器不响应指南
  • Pytest快速入门
  • 软考网络工程师笔记
  • LeetCodehot 力扣热题100 二叉树的右视图
  • 如何正确安装Stable Diffusion Web UI以及对应的xFormers
  • mysql的rpm包安装
  • 【C++指南】不允许你不了解C++命名空间
  • Spring Boot 定时任务:轻松实现任务自动化
  • SQL-leetcode—1581. 进店却未进行过交易的顾客
  • EtherNetIP转ModbusTCP网关,给风电注入“超级赛亚人”能量
  • SQL数据清理:去除字段值中的多余符号(Demo例子)
  • 【NLP 24、模型训练方式】
  • 负载均衡集群——LVS-DR配置
  • PowerBI 矩阵 列标题分组显示(两行列标题)
  • Golang 的字符编码与 regexp
  • 《Grafana进阶教程-使用百度地图》
  • 数据库设计流程范式
  • js 使用缓存判断在规定时间内显示一次弹框
  • wx061基于ssm+vue+uniapp的疫情期间学生请假与销假系统小程序
  • Maven 中的 `<dependencyManagement>` 标签及其高级用法