1. 程式人生 > >如何修復無法啟動的docker容器

如何修復無法啟動的docker容器

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容器