參考 :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容器壞掉,致使數據丟失了。