如何进入docker:先查容器id再执行exec命令直接登入
一开始对着终端发呆半小时,满脑子都是如何进入docker,网上五花八门的零散命令看得头大,再敲代码的时候总是习惯性偷懒,不想逐行细读教程,只想随手输一行指令直接切入容器内部,结果连续输错三次指令,终端反复弹出容器不存在的报错提示,越折腾越不耐烦,干脆趴在工位上放空,暂时放弃了操作。
最开始傻乎乎认定,docker有专属的一键进入命令docker enter,随便找了个帖子看到有人提过这条指令,懒得验证真假就直接复制粘贴运行,结果终端直接提示未知指令,压根没有这条原生命令。当时第一反应不是自己记错了,而是怀疑本地docker安装包损坏,接连重启两次docker后台服务,看着电脑风扇持续高速转动发出嗡鸣,白白耗掉二十多分钟,问题没有半点好转,反而耽误了手头原本要做的测试工作。
重启完全没用。
后来才反应过来,网上流传的很多快捷进入命令都是第三方插件适配的,原生docker根本不支持。之后又听信别的博主推荐,改用docker attach命令进入容器,当时确实顺利进到了容器终端里,还以为终于解决了问题,结果操作完随手退出终端,后台正在运行的项目服务直接全线停止,容器直接被迫关闭。那一瞬间才意识到,attach命令有致命短板,它绑定的是容器的主进程终端,一旦退出会话,整个容器就会跟着停止运行,完全没办法满足日常后台操作的需求。
反正大部分新手都会踩attach这个坑,包括我自己。很多人懒得区分两条命令的使用场景,只追求能成功进入容器就行,忽略了退出之后带来的连锁问题,往往进去容易,退出之后服务崩掉补救起来格外麻烦。日常开发调试、修改容器内部配置文件,绝对不能用attach指令,这条命令只适合单纯查看容器实时运行日志。
真正适配日常使用、没有副作用的进入方式其实很简单,全程只用docker自带原生指令,不需要安装任何额外插件,也不用修改docker的配置文件。先输入docker ps查看所有正在运行的容器,截取容器ID前三位字符就可以使用,不用完整复制一长串ID,省去多余输入步骤,紧接着输入docker exec -it 容器ID /bin/bash,就能交互式进入容器内部。如果是轻量化的alpine镜像,本身没有bash环境,把后缀换成/bin/sh就能正常登入,适配绝大多数线上和本地的容器环境。
之前还忽略过一个很基础的前提问题,容器处于停止状态的时候,exec命令也会运行失败。之前碰到过一次报错,盯着命令行看了很久都没找到问题,最后才发现容器早就自动休眠停止运行了,先执行docker start唤醒容器,再执行进入指令就不会有任何报错。
身边做运维的同事从来不用命令行手动进入,全都装了可视化docker面板,靠鼠标点击就能一键进入容器,看着省时又省心。但我见过他好几次面板更新之后出现兼容bug,面板识别不到本地容器,反倒彻底没法进入,对比下来原生命令虽然要手动敲几行代码,但是稳定性永远不会出问题。
指尖停在终端关闭按钮上迟疑了几秒,最后直接点了关闭,没有再保存这次输入过的所有指令记录。