无法进入docker容器内排查总结

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

在进行处理服务器磁盘空间时,发现无法进入docker内部进行清理空间

在执行时,报下面错误

docker exec -it 容器ID bash

image

查看容器状态

docker ps

发现进程status 状态为up 启动状态,但是在进行进入容器操作时,却提示容器没有启动
临时解决
重启了docker服务,正常进入容器
但是具体原因得找到,所以就进行了排查之路
排查过程
首先此容器服务正常运行,考虑可能原因点:

  1. 内存溢出,导致hang住
  2. 服务进程被人异常删除(例如,直接清理了pid文件,却没有常规杀进程,导致ps可以看到进程存在)
  3. 在client和容器连接中出来问题(可能client连接不到容器)
  4. 容器代码有问题(比如进程的处理过程,资源分配不当)
  5. 容器内部署了supervisor,会不会是服务不可用的时候,自己已经停止,然后supervisor强行拉起,但是仍然不可用
  6. 容器内部应用服务不可用
  7. 磁盘空间不足
    ...

然后逐一分析可能性

  • 1 内存

      当时没有考虑到这点,所以重启之前忘了查看内存,也进不去容器,所以无法用free -m 查看当时容器的内存情况。后期在重启后有查看系统/var/log下的日志,并没有发现有报内存不足的错,这点排除了
  • 2 pid删除

     可以查看一下/root/.bash_history看一下历史命令,看有没有人误操作过删除pid文件,命令中没有找到,排除了这个原因
  • 3 容器连接问题

    这点源于看到一篇文章,里面讲了关于docker本身的处理架构,如下图所示:

    image

当执行docker exec 时,实质是通过client连接daemon,然后转到容器
所以考虑是不是client和daemon之间出了问题,或是他们其中一个出了问题
因为重启,没办法问题重现,只能通过容器记录的日志寻找蛛丝马迹
image

找到在容器内的日志里报“容器不存在”,只能证明不是client出了问题,因为还能提供服务,也不像是容器内部的问题,那就剩下daemon了

总结出其他人解决的几个步骤(不知道是否适用,仅供排查参考):
- 1 strace -ff -o log -v docker ps  输出日志追踪
- 2 升级内核,升级daemon
- 3 重启
  • 4容器代码问题

        也就是daemon问题,因为重启了,就可以正常使用
  • 5 supervisor导致

        想到supervisor的原因是因为docker官方在最新版docker中基于supervisor部分的代码有了很大的改动,不确定是否在这其中存在bug 
  • 6 容器内应用问题

       这点最先排除,排除理由,内部应用的启动停止,不会影响外部连接,所以排除
    
  • 7空间问题

         考虑这个原因是因为能发现登不进去容器的事情就是为了清理这台机器的空间,是否因为存储影响,但是docker重启问题消失了,所以排除
    

自我总结:
当遇到此类问题时,如果时间紧,可以先重启,之后排查具体原因,但重启前有些操作还是需要提前想到的(如我上面罗列的可能性),尤其是基础信息,其次,就是日志,要利用好系统日志和docker自己本身的日志,有机会的话对docker的内部机制深入了解,排查起来可能更能抓住重点。写下这次排查的过程,争取以后遇到类似的问题,不至于毫无头绪,不踩之前掉进去的坑

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
1天前
|
Docker 容器
|
1天前
|
网络协议 Linux 网络安全
遇到Docker容器网络隔断?揭秘六种超级实用解决方案,轻松让Docker容器畅游互联网!
【8月更文挑战第18天】Docker容器内网络不通是开发者常遇问题,可能因网络配置错、Docker服务异常或防火墙阻碍等原因引起。本文提供六种解决策略:确认Docker服务运行状态、重启Docker服务、检查与自定义Docker网络设置、验证宿主机网络连接、临时禁用宿主机IPv6及检查防火墙规则。通过这些步骤,多数网络问题可得以解决,确保容器正常联网。
9 1
|
3天前
|
安全 Ubuntu Docker
深度挖掘Docker 容器
【8月更文挑战第16天】Docker容器间的连接是容器化技术的关键,支持容器与宿主机的数据交换。主要方法包括:1) 利用Docker网络驱动创建自定义网络,使容器相连通信;2) 采用Docker Compose通过配置文件简化多容器应用的部署与互联;3) 虽不推荐,早期使用--link参数实现容器互联;4) 通过环境变量配置连接信息;5) 共享卷支持文件共享和间接通信。推荐使用Docker网络和Docker Compose以实现高效灵活的容器间通信。
17 3
|
4天前
|
Ubuntu Linux Docker
使用Docker进行容器化:从零开始的技术博文
【8月更文挑战第16天】从零开始掌握Docker容器化技术:本文详细介绍Docker基本概念、安装配置流程及核心组件。涵盖Docker镜像与容器管理、镜像加速配置,以及如何利用Dockerfile自动化构建镜像,助您快速入门并高效运用Docker进行软件开发与部署。
|
4天前
|
Docker 容器
Docker - 网络模式与容器网络互连
Docker的网络模式包括桥接模式、主机模式和覆盖网络模式,以及如何通过Docker的网络操作命令实现容器网络互连。
12 0
|
4天前
|
Linux Docker 容器
在CentOS操作系统上使用yum安装/使用/卸载Docker容器引擎
在CentOS操作系统上安装、配置、使用和卸载Docker容器引擎的详细步骤,包括配置Docker镜像加速的方法。
27 0
|
5天前
|
存储 Ubuntu Linux
如何在 Ubuntu 上使用 Docker 容器化和部署多个 WordPress 应用程序
如何在 Ubuntu 上使用 Docker 容器化和部署多个 WordPress 应用程序
12 0
|
5天前
|
Ubuntu NoSQL 关系型数据库
在Ubuntu操作系统上安装/使用/卸载Docker容器引擎
这篇文章详细介绍了在Ubuntu操作系统上安装、配置、使用、基本操作以及卸载Docker容器引擎的步骤,包括配置Docker镜像加速和使用Docker部署Nginx、MySQL和Redis服务器的方法。
25 0
|
23天前
|
Shell 应用服务中间件 nginx
docker 服务,镜像,容器命令总结
docker 服务,镜像,容器命令总结
111 4