背景: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