如何修复无法启动的docker容器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修复无法启动的docker容器相关的知识,希望对你有一定的参考价值。
如何修复无法启动的docker容器
背景:
测试服务器上使用docker搭建了个elasticsearch服务集群,由于需要为es安装中文分词的插件,不料安装的姿势有问题,导致无法启动了。由于是测试开发所用,也没有为容器挂载数据卷,所以容器关闭后宿主机上就没有相关的目录了。而且是plugins目录结构的原因导致es服务找不到相关文件无法启动。
解决方法,使用cp命令将整个plugins目录复制到宿主机下修改,然后再cp回容器里:
# 将plugins目录cp到宿主机
[[email protected] ~]# docker cp es1:/usr/share/elasticsearch/plugins ./
... 修改目录结构 ...
[[email protected] ~]# docker cp ./plugins/ es1:/usr/share/elasticsearch/ # cp回容器里
[[email protected] ~]# docker start es1 # 启动容器
另一个解决方法是创建镜像,把这个问题容器用docker commit提交到一个新的镜像,然后用docker run -it 基于新镜像运行一个新的容器进去改变(修复)配置文件。再通过新的容器再提交一个新的镜像,然后在基于新的镜像重新启动容器(同最初的容器)。这个方法是可行的,但问题是步骤多,而且提交了新的镜像,对于后续维护增加了复杂性。
步骤如下:
#把要修复的容器提交为镜像
[[email protected] ~]# docker commit <container_id> <image_name>:<tag>
[[email protected] ~]# docker rm <container_id> # 删除无法启动的容器,反正也用不了
#查看刚建立的新镜像
[[email protected] ~]# 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
#利用这个新镜像创建容器,进入容器,修复配置文件
[[email protected] ~]# docker run -it --name fix-es1 old-es1:first /bin/bash
#重新提交镜像
[[email protected] ~]# docker commit <container_id> <image_name>:<tag>
#创建修复后的容器
[[email protected] ~]# docker run -d --name es1 -p 9200:9200 -p 9300:9300 ok-es1:first
以上是关于如何修复无法启动的docker容器的主要内容,如果未能解决你的问题,请参考以下文章