regw333 发表于 2014-12-29 08:35:49

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

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

一、寻找问题
1、启动iframe-test机器
root@ubuntu:~#docker start iframe-testiframe-test2、发现没有容器进程
root@ubuntu:~#docker ps |grep iframe-test3、查看日志,发现是nginx配置有问题,导致中断。
root@ubuntu:~#docker logs iframe-test
Startingnginx: Starting periodic command scheduler: cron.nginx: unexpected end of file, expecting ";" or "}" in/etc/nginx/nginx.conf:21nginx: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-testfa02f8084b63      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#lsetcroot runsrvtmp usrvar接下来找到这个容器里面nginx.conf的语法错误处修改。
4、修改后启动容器
root@ubuntu:~#docker start iframe-test
root@ubuntu:~# docker ps |grep iframe-testfa02f8084b63      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容器坏掉,导致数据丢失了。

页: [1]
查看完整版本: docker容器故障致无法启动解决实例