Docker与容器交互——attach和exec

server/2025/2/13 23:28:09/

阅读《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.ppmy.cn/server/167456.html

相关文章

[MFC] 使用控件

介绍如何使用控件,以及如何获取控件中的数值 check Box 添加点击事件,即选中和取消选中触发的事件 第一种方式是按照如下方式第二种方式是直接双击点击进去 void CMFCApplication1Dlg::OnBnClickedCheckSun() {// TODO: 在此添加控件通知处理程序代…

蓝桥杯备考:贪心算法简介

贪心算法就是企图用局部最优的策略找出全局最优步骤就是1,把解决问题的过程分成若干步。2,每一步都选择当前看起来最优的解法 。 3,希望得到全局最优的结果 比较经典的例题一个就是 找零问题 钞票种类[20,10,5,1]用最小的张数找零46的时候…

Android10 音频参数导出合并

A10 设备录音时底噪过大,让音频同事校准了下,然后把校准好的参数需要导出来,集成到项目中,然后出包,导出方式在此记录 设备安装debug系统版本调试好后, adb root adb remount adb shell 进入设备目录 导…

HTML 链接

HTML 链接 引言 HTML(超文本标记语言)是构建网页的基础,而链接是网页中不可或缺的元素。链接不仅能够连接到其他网页,还能实现网页内部内容的跳转。本文将详细介绍HTML链接的用法、属性以及如何实现链接的优化。 HTML链接的基本…

win11+mac键盘+PowerToys 重映射热键

在win11系统中,使用mac的蓝牙键盘,键盘本身没有PrintScreen键。这时可以借助PowerToys来将其他键映射到系统的PrintScreen. 1.下载安装PowerToys 地址https://learn.microsoft.com/zh-cn/windows/powertoys/ 2.打开PowerToys,选中【键盘管理器…

解决 Sentinel 控制台无法显示 OpenFeign 资源的问题

前言 在使用 Spring Cloud Alibaba Sentinel 进行微服务治理时,可能会遇到 Sentinel 控制台无法显示 OpenFeign 资源的问题。本文将详细分析问题的原因,并提供解决方案。 一、问题描述 在 Sentinel 控制台 1.8.8 版本中,簇点链路&#xff…

【github】docker realtime

Linux和Docker实时指南,适用于Ubuntu实时内核和PREEMPT_RT ReadMe.md 作者:Tobit Flatscher(2021 - 2024) 概述 本指南解释了如何在Linux操作系统内开发/部署运行实时代码的Docker容器。因此,它会带你了解&#xf…

Spring Boot整合DeepSeek实现AI对话(API调用和本地部署)

本篇文章会分基于DeepSeek开放平台上的API,以及本地私有化部署DeepSeek R1模型两种方式来整合使用。 本地化私有部署可以参考这篇博文 全面认识了解DeepSeek利用ollama在本地部署、使用和体验deepseek-r1大模型 Spring版本选择 根据Spring官网的描述 Spring AI是一…