如何修復無法啟動的docker容器
阿新 • • 發佈:2018-10-26
clas sea docker容器 fix eat class run 無法啟動 lang 如何修復無法啟動的docker容器
背景:
測試服務器上使用docker搭建了個elasticsearch服務集群,由於需要為es安裝中文分詞的插件,不料安裝的姿勢有問題,導致無法啟動了。由於是測試開發所用,也沒有為容器掛載數據卷,所以容器關閉後宿主機上就沒有相關的目錄了。而且是plugins目錄結構的原因導致es服務找不到相關文件無法啟動。
解決方法,使用cp命令將整個plugins目錄復制到宿主機下修改,然後再cp回容器裏:
# 將plugins目錄cp到宿主機 [root@study-01 ~]# docker cp es1:/usr/share/elasticsearch/plugins ./ ... 修改目錄結構 ... [root@study-01 ~]# docker cp ./plugins/ es1:/usr/share/elasticsearch/ # cp回容器裏 [root@study-01 ~]# docker start es1 # 啟動容器
另一個解決方法是創建鏡像,把這個問題容器用docker commit提交到一個新的鏡像,然後用docker run -it 基於新鏡像運行一個新的容器進去改變(修復)配置文件。再通過新的容器再提交一個新的鏡像,然後在基於新的鏡像重新啟動容器(同最初的容器)。這個方法是可行的,但問題是步驟多,而且提交了新的鏡像,對於後續維護增加了復雜性。
步驟如下:
#把要修復的容器提交為鏡像 [root@study-01 ~]# docker commit <container_id> <image_name>:<tag> [root@study-01 ~]# docker rm <container_id> # 刪除無法啟動的容器,反正也用不了 #查看剛建立的新鏡像 [root@study-01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE old-es3 first bf1fdb9b3a2d 54 minutes ago 550 MB old-es2 first 4e1a92871782 55 minutes ago 550 MB old-es1 first d1a485b8f5c0 55 minutes ago 551 MB #利用這個新鏡像創建容器,進入容器,修復配置文件 [root@study-01 ~]# docker run -it --name fix-es1 old-es1:first /bin/bash #重新提交鏡像 [root@study-01 ~]# docker commit <container_id> <image_name>:<tag> #創建修復後的容器 [root@study-01 ~]# docker run -d --name es1 -p 9200:9200 -p 9300:9300 ok-es1:first
如何修復無法啟動的docker容器