如何修復沒法啓動的docker容器

如何修復沒法啓動的docker容器

背景:docker

測試服務器上使用docker搭建了個elasticsearch服務集羣,因爲須要爲es安裝中文分詞的插件,不料安裝的姿式有問題,致使沒法啓動了。因爲是測試開發所用,也沒有爲容器掛載數據卷,因此容器關閉後宿主機上就沒有相關的目錄了。並且是plugins目錄結構的緣由致使es服務找不到相關文件沒法啓動。bash

解決方法,使用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 基於新鏡像運行一個新的容器進去改變(修復)配置文件。再經過新的容器再提交一個新的鏡像,而後在基於新的鏡像從新啓動容器(同最初的容器)。這個方法是可行的,但問題是步驟多,並且提交了新的鏡像,對於後續維護增長了複雜性。elasticsearch

步驟以下:ide

#把要修復的容器提交爲鏡像
[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
相關文章
相關標籤/搜索