docker容器故障致无法启动解决实例

简介:

今日内网断电后,有一台机器没有如往常一样起来,该服务器是docke上的一个容器,然后登录docker宿主机,开始问题分析及解决:

 

一、寻找问题

1、启动iframe-test机器

root@ubuntu:~#docker start iframe-test

iframe-test

2、发现没有容器进程

root@ubuntu:~#docker ps |grep iframe-test

3、查看日志,发现是nginx配置有问题,导致中断。

root@ubuntu:~# docker logs iframe-test


Startingnginx: Starting periodic command scheduler: cron.

nginx:[emerg] unexpected end of file, expecting ";" or "}" in/etc/nginx/nginx.conf:21

nginx:configuration file /etc/nginx/nginx.conf test failed

 

二、思考解决方法

问题原因找到,就是nginx文件检测不通过,导致中断。

解决思路暂有两个:

   方法一:把这个问题容器用docker commit提交到一个新的镜像,然后用docker run -i -d基于新镜像运行一个临时终端进去改变配置文件,然后把临时终端的id提交到一个新的镜像,然后在基于新的镜像重新启动容器。(这个方法步骤多,而且提交了新的镜像,对于后续维护增加了复杂性)

   方法二:直接改变容器里的配置文件,不需要新提交镜像。但是这个容器是宕状态,怎么改呢?下面进行详细说明。在此多谢网友Lingx是供解决思路。

 

三、修改宕机容器配置

所有的容器数据都存在/var/lib/docker/aufs/diff/路径下。下面容器ID目录,以init结尾的是放配置文件的,有/etc/host、reselv.conf,/dev等。另一个是放的文件目录,比如/home/var/及自己安装的服务等等,aufs需要内核3.10以上的支持

 

1、查看容器id

root@ubuntu:~#docker ps -a|grep iframe-test

fa02f8084b63        debian06-base:latest  

 

2、查找nginx.conf配置文件路径

root@ubuntu:~#find / -name 'nginx.conf'

/root/nginx.conf

/var/lib/docker/aufs/diff/7c7b3438586e0653cdca7977a4f889cfdca300f008771462f8a2e6e9d3bc5b84/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/6bc6a9a5aeb59e19cae8bb78daa481cc465051069c7854528cbfdb3c9c1f2bfb/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/c7b6b87cfda72701229eebca868eb047aa01c255b62e56ad223dc75396c584e4/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456/etc/nginx/nginx.conf

 

3、进入对应容器id的目录,修改问题文件

root@ubuntu:cd /var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456

执行ls命令,容器的根目录展现在面前,是不是很熟悉?

root@ubuntu:/var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456#ls

etc  root run  srv  tmp usr  var

接下来找到这个容器里面nginx.conf的语法错误处修改。

 

4、修改后启动容器

root@ubuntu:~# docker start iframe-test


root@ubuntu:~# docker ps |grep iframe-test

fa02f8084b63        debian06-base:latest        "/etc/rc.local"     6 weeks ago         Up 13 minutes       10.18.103.2:22->22/tcp,10.18.103.2:80->80/tcp, 10.18.103.2:443->443/tcp,10.18.103.2:3306->3306/tcp, 10.18.103.2:6379->6379/tcp,10.18.103.2:6381->6381/tcp, 10.18.103.2:8000->8000/tcp,10.18.103.2:8888->8888/tcp                                                                                                                                  iframe-test 

 

容器启动成功,问题解决。以后再也不用担心docker容器坏掉,导致数据丢失了。


我的其它docker相关文章:

运维人员的解放----Docker快速部署

http://yangrong.blog.51cto.com/6945369/1551327

docker容器端口IP规划及端口动态扩容

http://yangrong.blog.51cto.com/6945369/1582184




     本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1596212,如需转载请自行联系原作者


相关文章
|
8月前
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
714 115
|
7月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
746 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
7月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
685 6
|
7月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
776 6
|
7月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
980 4
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
442 56
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令
1231 1