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,如需轉載請自行聯絡原作者
相關文章
- docker容器故障致無法啟動解決例項薦Docker
- 解決hyper v導致docker無法啟動問題Docker
- 【故障處理】修改主機名導致oracle例項無法啟動暨如何修改hostnameOracle
- 解決記憶體設定過大導致例項無法啟動ORA-27100記憶體
- 軟硬碟都無法啟動故障一例 (轉)硬碟
- Docker啟動故障問題 no such file or directory解決方法Docker
- 一次修改系統引數導至ORACLE無法啟動例項的故障Oracle
- 【故障處理】使用GC調整資料庫為SGA自動管理後導致例項無法啟動(ORA-00824)GC資料庫
- 【問題處理】因ASM磁碟組空間不足導致資料庫例項無法啟動的故障處理ASM資料庫
- ics無法啟動的解決
- 錯誤初始化引數導致無法啟動的解決辦法
- WinXP啟動無法顯示桌面,無法啟動IE,無法關機的解決方案
- 解決ASM無法啟動問題ASM
- docker容器無法啟動的情況下,如果修改配置檔案Docker
- Docker容器配置Nginx例項分享DockerNginx
- rpi-mongodb3 容器無法重啟解決方案MongoDB
- 神奇的DEBUG:因為異常導致MongoDB容器無法啟動MongoDB
- 由AIX系統故障導致系統重啟,使Oracle資料庫自動啟動例項AIOracle資料庫
- Oracle Restart啟動資料庫例項故障一例OracleREST資料庫
- VMvare 無法進入BIOS,設定啟動項的解決方法iOS
- 記vscode無法啟動解決辦法VSCode
- tomcat無法啟動的解決方法Tomcat
- Linux檔案系統破壞,導致系統無法啟動解決辦法Linux
- TSM無法備份故障解決(續)
- terminating the instance due to error481導致ASM無法啟動故障ErrorASM
- Oracle 11.2.0.4 RAC $ORACLE_HOME/bin/oracle許可權不對導致無法啟動例項Oracle
- Oracle 11g RAC的ASM例項記憶體引數被修改導致無法啟動OracleASM記憶體
- eclipse: workspace出錯導致無法啟用的解決Eclipse
- Asp.net 無法啟動IIS Express 解決辦法ASP.NETExpress
- [php]wmap應用程式無法啟動解決辦法PHP
- [oracle]undo表空間出錯,導致資料庫例項無法開啟Oracle資料庫
- 解決GITLAB無法啟動runsv no runningGitlab
- linux mysql無法啟動怎麼解決?LinuxMySql
- Apache無法啟動解決 the requested operation has failedApacheAI
- oracle 9iAgent無法啟動解決方案Oracle
- 11gR2私有ip修改錯誤導致crs無法啟動解決方法
- Docker重啟保持容器自動啟動Docker
- 記一次ORA-01102導致資料庫例項無法啟動案例資料庫