docker容器故障致沒法啓動解決實例

參考 :http://www.mincoder.com/article/4045.shtml
html

今日內網斷電後,有一臺機器沒有如往常同樣起來,該服務器是docke上的一個容器,而後登陸docker宿主機,開始問題分析及解決:nginx

 

1、尋找問題web

1、啓動iframe-test機器docker

root@ubuntu :~#docker start iframe-testubuntu

iframe-test服務器

2、發現沒有容器進程tcp

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

3、查看日誌,發現是nginx配置有問題,致使中斷。.net

root@ubuntu :~# docker logs iframe-test3d


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

 

2、思考解決方法

問題緣由找到,就是nginx文件檢測不經過,致使中斷。

解決思路暫有兩個:

   方法一:把這個問題容器用docker commit提交到一個新的鏡像,而後用docker run -i -d基於新鏡像運行一個臨時終端進去改變配置文件,而後把臨時終端的id提交到一個新的鏡像,而後在基於新的鏡像從新啓動容器。(這個方法步驟多,並且提交了新的鏡像,對於後續維護增長了複雜性)

   方法二:直接改變容器裏的配置文件,不須要新提交鏡像。可是這個容器是宕狀態,怎麼改呢?下面進行詳細說明。在此多謝網友Lingx是供解決思路。

 

3、修改宕機容器配置

全部的容器數據都存在/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容器壞掉,致使數據丟失了。

相關文章
相關標籤/搜索